默认返回值上的dict.pop与dict.get

2024-05-15 04:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出将None作为dict.get的默认值,但没有为dict.pop指定默认值的原因是什么

{}.get('my_key')
# output: None
{}.pop('my_key')
# output: KeyError: 'my_key'

我认为没有dict.pop的隐式默认值的原因是因为您可能有值为None的键,因此,为了不混淆您的键是否在字典中,dict.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

Tags: thekeynoneoutputget字典my原因
3条回答

如果您主要关心的是字典中是否存在键,那么应该通过'my_key' in my_dict完成.get.pop正如您所想象的,服务于稍微不同的目的.get是严格的检索,而.pop是检索删除。您将希望使用最适合您的用例的相应方法,如果不需要处理KeyError,则使用默认值

至于.pop在默认情况下不使用默认值的原因,这是因为该操作还希望从字典中删除一个键。如果操作成功完成而未引发错误,则可能会错误地认为密钥也会从字典中删除

对于.get,该方法专门作为替代方法存在,以在__getitem__方法上提供默认值,您通常将该方法的语法视为my_dict['my_key']。后者将在密钥不存在时引发KeyError

get在某种意义上存在于两种类型中:一种产生了KeyError,另一种没有

>>> {}['my_key']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'my_key'
>>> {}.get('my_key')
>>>

另一方面pop不是引发KeyError的另一个操作的无错误版本,因此它用于两种情况:默认情况下引发KeyError,但在请求时返回默认值

>>> {}.pop('my_key')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'my_key'
>>> {}.pop('my_key', 3)
3

读取键的精确值的方法是

{}['my_key']

dict.get(key[,default])是try-get值,如果不返回“default”版本

help(dict.get)

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.

相关问题 更多 >

    热门问题