擅长:python、mysql、java
<p>你做的第一件事是对的。至于<code>y</code>,当<code>y</code>中不存在键时,它将创建默认为0的defaultdict,因此可以将其视为嵌套字典。请考虑以下示例:</p>
<pre><code>y = defaultdict(lambda: defaultdict(lambda: 0))
print y['k1']['k2'] # 0
print dict(y['k1']) # {'k2': 0}
</code></pre>
<p>要创建一个没有defaultdict的等价嵌套字典结构,您需要为<code>y['k1']</code>创建一个内部dict,然后将<code>y['k1']['k2']</code>设置为0,但是当defaultdict遇到它没有看到的键时,它会在幕后执行所有这些操作:</p>
<pre><code>y = {}
y['k1'] = {}
y['k1']['k2'] = 0
</code></pre>
<p>以下功能可能有助于在口译员上使用此功能,以便更好地理解:</p>
<pre><code>def to_dict(d):
if isinstance(d, defaultdict):
return dict((k, to_dict(v)) for k, v in d.items())
return d
</code></pre>
<p>这将返回与嵌套的defaultdict相当的dict,它更易于阅读,例如:</p>
<pre><code>>>> 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}}
</code></pre>