Python:字典中的字典?

3
我需要帮助执行一个相当简单的练习,只是在语法上我有点迷失。基本上,我读入一个非常简短的文本文件,其中包含15行3个元素(实质上是2个键和一个值)。将这些元素放入由字典组成的字典中,第一个字典包含位置,第二个字典由物品类型和价格组成。举个例子:{'gymnasium': {'weights': 15, 'shoes': 50}}。基本上,我需要循环遍历这个文件,但我无法将其作为字典列表读入。此外,如果外部列表中存在该键的实例,则无法将内部列表附加到外部列表。
2个回答

8
这似乎是一道作业,我只能提供一些提示。
您可能知道这是创建新字典的方式:
d = {}

向字典添加条目:

d[key] = value

更具体地说,添加一个键为字符串、值为另一个字典的条目:
d["gymnasium"] = {}

现在,无论何时您在较大的表达式中编写d["gymnasium"],您都将获得对该内部字典的访问权限,并且可以对其执行通常的字典操作,例如使用[]=将某些内容添加到其中:
d["gymnasium"]["weights"] = 15

很好的解释。还要记住,由于键可以是字符串,因此键可以通过变量输入。例如,如果我说 var = "weights", 我可以在代码中使用它 d["gymnasium"][var] = 15 来实现与 Aasmund 的代码最后一行相同的效果。 - Ben Schwabe

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接