`dict.pop`忽略`collections.defaultdict(default_factory)`设置的默认值

问题描述 投票:0回答:1

Python 的

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
设置的默认值吗?

python python-3.x dictionary defaultdict python-collections
1个回答
5
投票

TL;DR:总之,defaultDict 将使

dict['inexistent-key']
返回您的默认值,其他任何内容都应该具有与普通字典相同的行为。

说明

您链接的文档指出:

它重写了一个方法[

__missing__()
]并添加了一个可写实例变量[
default_factory
]。其余功能与 dict 类相同,此处未记录。

这在

__missing__()
方法本身下进一步指定,该方法由
__getitem__()
在字典上调用:

请注意,除了

__missing__()
之外,任何操作都不会调用
__getitem__()
。这意味着
get()
将像普通字典一样返回
None
作为默认值,而不是使用 default_factory。

因此,不仅

pop()
会有相同的行为,
get()
也会有相同的行为。拥有默认值的唯一方法是直接在你的字典上使用
[key]
。如果我们考虑一下,这绝对是对字典最相关的调用。

© www.soinside.com 2019 - 2024. All rights reserved.