2016-02-19 135 views
1

我需要一个非常简单的练习帮助,我试图执行,只是语法上我有点失落。Python:词典中的词典?

基本上我在含有15行3个元素(基本上是2个键和值)

  • 把这些元件到由字典的字典非常简短的文本文件中读取
  • 所述第一字典包含位置并且它是由该项目的类型多少和第二字典它的成本

例如:

 
Location Item  Cost 
------------------------ 
gymnasium weights 15 

market  cereal 5 

gymnasium shoes 50 

saloon  beer  3 

saloon  whiskey 10 

market  bread 5 

这将导致

{'gymnasium': {'weights': 15, 'shoes': 50}
等的其他键

基本上我需要遍历这个文件,但我挣扎在内容类型的字典字典阅读。此外,没有那部分,我不知道如何将内部列表追加到外部列表中,如果外部列表中的键的实例发生。

回答

2

这看起来像家庭作业,所以我只会提供一些提示。

你可能知道,这是你如何创建一个新的字典:

d = {} 

添加到字典中的条目:

d[key] = value 

更具体地说,增加它的键为一个字符串的条目,其价值是另一个字典:

d["gymnasium"] = {} 

现在,只要你写d["gymnasium"]作为较大表达式的一部分,您可以访问该内部字典,并且可以对其执行常用字典操作,例如,使用[]=补充一下吧:

d["gymnasium"]["weights"] = 15 
+0

很好的解释。还要记住,由于一个键可以是一个字符串,因此可以从一个变量输入一个键。例如,如果我说'var =“weights”',我可以在代码'd [“gymnasium”] [var] = 15'中使用它,以达到与Aasmund代码的最后一样的效果。 –

0

collections.defaultdict可能对你非常有用的,如果你允许使用STDLIB。它会自动创建不存在使用你定义一个函数任何键的,所以:

import collections 

dd = collections.defaultdict(dict) 
dd['a']['b'] = "foo" 

将产生如下的结构:

{'a': {'b': 'foo'}} 

如果您不能使用defaultdict,你会在分配给更深的字典之前,必须使用dict.setdefault或测试成员身份。

dd = {} 
location, item, cost = ("gymnasium", "weights", 15) 

# Either 
if location in dd: 
    dd[location][item] = cost 
else: 
    # dd[location] does not exist yet! 
    dd[location] = {item: cost} 

# Or 
dd.setdefault(location, {})[item] = cost 

# Or with defaultdict 
ee = collections.defaultdict(dict) 
ee[location][item] = cost # creates automagically