2016-02-19 218 views
1

我需要一個非常簡單的練習,我想執行幫助遞歸字典,只是語法上我有點失落蟒蛇:字典

基本上我在含15行3種元素的一個非常簡短的文本文件閱讀(基本上2個鍵和值)

把這些元件到由字典

所述第一字典包含位置和它是由該項目的類型和多少它的成本對的第二詞典的詞典示例

gymnasium weights 15 
market cereal 5  
gymnasium shoes 50 
saloon beer 3 
saloon whiskey 10 
market bread 5 

,這將導致該

{ 
    'gymnasium': { 
    'weights': 15, 
    'shoes': 50 
    }, 
    'saloon': { 
     'beer': 3, 
     'whiskey': 10 
    } 
} 

等的其他鍵

基本上我需要遍歷這個文件,但我掙扎在內容類型的字典字典閱讀。

此外沒有那部分我不能弄清楚如果外部列表中的鍵的實例發生如何將內部列表附加到外部列表。

我想做到這一點遞歸

location_dict = {} #row #name day weight temp 
item_dict = {} 
for line in file: 
    line = line.strip() 
    location_dict[item_dict['location'] = item_dict` 

回答

0

這裏另一種方案

yourFile = open("yourFile.txt", "r") 
yourText = yourFile.read() 
textLines = yourText.split("\n") 
locationDict = {} 
for line in textLines: 
    k1, k2, v = line.split(" ") 
    if k1 not in locationDict.keys(): 
     locationDict[k1] = {} 
    else: 
     if k2 not in locationDict[k1].keys(): 
      locationDict[k1][k2] = int(v) 
     else: 
      locationDict[k1][k2] += int(v) 

print locationDict 

希望它有幫助!

+0

嘿!我喜歡你的方法,它確實有幫助。你認爲你可以解決上面提到的關於爲一個項目的多個實例添加值的第二個功能。仍然真的停留在這個和它令人沮喪! – newtTongue

+0

你好!我剛剛修改了答案以添加您提到的功能。值得一提的是,我不得不使用「int」將值轉換爲整數,以便能夠進行算術和(否則代碼將連接兩個字符串)。這對你有用嗎? –

2

這是setdefault(或defaultdict)

data = {} 
for line in file: 
    key1,key2,value = line.split() 
    data.setdefault(key1,{})[key2] = value 

print data 

一個良好的使用或根據您的評論

from collections import defaultdict 
data = defaultdict(lambda:defaultdict(int)) 

for line in file: 
    key1,key2,value = line.split() 
    data[key1][key2] += value 

print data 
+0

看到http://ideone.com/Lil9jR –

+0

*體育館權重15個*體育館權重20 *市場穀物5 *市場穀物10 *市場穀物5 *體育館鞋50 *轎車啤酒3 *轎車啤酒7 *沙龍威士忌10 *市面包5. ========感謝您的幫助!只是爲了後勤的緣故,如何處理這種情況,即某個項目有多個實例,並且我想在我的最終列表中打印所有重複項目值的總成本。所以市場穀物:會打印'市場':{'cereal:20},權重35等等 – newtTongue

+0

我編輯了我的解決方案以包含該功能 –