您对第一个所做的事情是正确的。至于y
,它会在 中不存在键时创建一个默认为 0 的 defaultdict y
,因此您可以将其视为嵌套字典。考虑以下示例:
y = defaultdict(lambda: defaultdict(lambda: 0))
print y['k1']['k2'] # 0
print dict(y['k1']) # {'k2': 0}
要创建一个没有 defaultdict 的等效嵌套字典结构,您需要创建一个内部 dict y['k1']
,然后设置y['k1']['k2']
为 0,但是 defaultdict 在遇到未见过的键时会在后台执行所有这些操作:
y = {}
y['k1'] = {}
y['k1']['k2'] = 0
以下功能可能有助于在解释器上使用它以更好地理解:
def to_dict(d):
if isinstance(d, defaultdict):
return dict((k, to_dict(v)) for k, v in d.items())
return d
这将返回与嵌套的 defaultdict 等效的 dict,它更容易阅读,例如:
>>> y = defaultdict(lambda: defaultdict(lambda: 0))
>>> y['a']['b'] = 5
>>> y
defaultdict(<function <lambda> at 0xb7ea93e4>, {'a': defaultdict(<function <lambda> at 0xb7ea9374>, {'b': 5})})
>>> to_dict(y)
{'a': {'b': 5}}