fil*_*ble 4 python dictionary data-structures defaultdict
如何使用defaultdict创建列表字典?我收到以下错误.
>>> from collections import defaultdict
>>> a=defaultdict()
>>> a["testkey"]=None
>>> a
defaultdict(None, {'testkey': None})
>>> a["testkey"]["list"]=[]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
这有点棘手.你创建了defaultdicts的defaultdict,如下所示:
defaultdict(lambda: defaultdict(list))
Run Code Online (Sandbox Code Playgroud)
比使用一个快一点lambda:
defaultdict(defaultdict(list).copy)
Run Code Online (Sandbox Code Playgroud)
这与wim的答案具有相同的可观察行为,但避免lambda支持在C中实现的(在CPython中)绑定的内置方法,这意味着默认值生成不必执行任何Python字节代码或查找任何名称,它运行速度较快.在微基准测试中,看起来当访问时不存在密钥时所支付的成本比其他方式低约5-10%lambda.
说真的,我之所以喜欢它,是因为我讨厌lambda由于人们过度使用它时,它是一个坏主意(例如,map/ filter有lambda总是比同等listcomp/genexpr更详细和更慢,但不断有人无论如何做它没有明显的理由),尽管在这种情况下它几乎不重要.