rus*_*ro1 5 python dictionary python-3.x
我正在尝试找出将其None作为默认值dict.get但没有默认值(未指定默认值)的原因是什么dict.pop
{}.get('my_key')
# output: None
{}.pop('my_key')
# output: KeyError: 'my_key'
Run Code Online (Sandbox Code Playgroud)
我在想没有隐式默认值的原因dict.pop是因为你可能有带值的键,None所以为了不混淆你的键是否在字典中,隐式默认值 fordict.pop并没有那么多感觉。但话又说回来,这种解释也应该适用于dict.get并且不是:
{'my_key': None}.get('my_key')
# output: None
# but doesn't tell you if the key is truly in the dictionary or not
Run Code Online (Sandbox Code Playgroud)
如果您主要关心的是字典中是否存在某个键,则应该通过'my_key' in my_dict. .get正如.pop您可以想象的那样,其用途略有不同。 .get是严格检索,.pop是检索和删除。您将需要使用最适合您的用例的相应方法,如果您不需要处理KeyError.
至于为什么.pop默认不使用默认值,是因为该操作期望也从字典中删除一个键。如果操作成功完成而没有引发错误,则人们可能会错误地认为该键也会从字典中删除。
对于.get,该方法专门作为替代方法而存在,以提供该__getitem__方法的默认值,您通常将其语法视为my_dict['my_key']。KeyError如果密钥不存在,后者将引发 a 。
get从某种意义上说,存在两种类型:一种会引发 a KeyError,另一种不会。
>>> {}['my_key']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'my_key'
>>> {}.get('my_key')
>>>
Run Code Online (Sandbox Code Playgroud)
pop,另一方面,不是另一个引发 a 的操作的无错误版本KeyError,因此它在两种情况下都使用:KeyError默认引发 a ,但如果需要则返回默认值。
>>> {}.pop('my_key')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'my_key'
>>> {}.pop('my_key', 3)
3
Run Code Online (Sandbox Code Playgroud)