dict.pop(key[, default])
会忽略 collections.defaultdict(default_factory)
设置的默认值,如以下代码片段所示:
from collections import defaultdict
d = defaultdict(lambda: 1)
d['a']
d['b'] = 2
print(d.pop('a')) # 1
print(d.pop('b')) # 2
print(d.pop('c', 3)) # 3
d.pop('e') # KeyError: 'e'
d
是defaultdict(lambda: 1)
。 d.pop('e')
导致 KeyError
。这是故意的吗? d.pop('e')
不应该返回 1
因为这是 defaultdict
设置的默认值吗?
TL;DR:总之,defaultDict 将使
dict['inexistent-key']
返回您的默认值,其他任何内容都应该具有与普通字典相同的行为。
您链接的文档指出:
它重写了一个方法[
]并添加了一个可写实例变量[__missing__()
]。其余功能与 dict 类相同,此处未记录。default_factory
这在
__missing__()
方法本身下进一步指定,该方法由 __getitem__()
在字典上调用:
请注意,除了
之外,任何操作都不会调用__missing__()
。这意味着__getitem__()
将像普通字典一样返回get()
作为默认值,而不是使用 default_factory。None
因此,不仅
pop()
会有相同的行为,get()
也会有相同的行为。拥有默认值的唯一方法是直接在你的字典上使用 [key]
。如果我们考虑一下,这绝对是对字典最相关的调用。