2016-02-19 157 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

我编辑了我的解决方案以包含该功能 –