你对第一个是正确的。至于y
,当键中不存在键时,它将创建一个默认值为0的defaultdict y
,因此您可以将其视为嵌套字典。考虑以下示例:
y = defaultdict(lambda: defaultdict(lambda: 0))
print y['k1']['k2']
print dict(y['k1'])
要创建一个没有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}}
y
不使用lambda一样创建deafultdict的另一种方法是使用partial
fromfunctools
,例如:y = defaultdict(partial(defaultdict, int))