问题:如果字典键不可用,则返回None
我需要一种方法来获取字典值(如果它的键存在),或者简单地返回None
,如果它不存在。
但是,KeyError
如果您搜索不存在的键,Python会引发异常。我知道我可以检查密钥,但是我正在寻找更明确的密钥。None
如果密钥不存在,是否有办法返回?
回答 0
您可以使用 dict.get()
value = d.get(key)
None
如果将返回key is not in d
。您还可以提供将返回的其他默认值,而不是None
:
value = d.get(key, "empty")
回答 1
别再奇怪了。它内置在语言中。
>>>帮助(dict) 模块内置的类字典帮助: 类dict(object) | dict()->新的空字典 | dict(mapping)->从映射对象的字典初始化的新字典 | (键,值)对 ... | | 得到(...) | D.get(k [,d])-> D [k]如果D中有k,否则为d。d默认为无。 | ...
回答 2
采用 dict.get
如果key在字典中,则返回key的值,否则返回默认值。如果未提供default,则默认为None,因此此方法永远不会引发KeyError。
回答 3
您应该使用类中的get()
方法dict
d = {}
r = d.get('missing_key', None)
这将导致r == None
。如果在字典中找不到键,则get函数将返回第二个参数。
回答 4
如果您想要一个更透明的解决方案,则可以继承dict
此行为:
class NoneDict(dict):
def __getitem__(self, key):
return dict.get(self, key)
>>> foo = NoneDict([(1,"asdf"), (2,"qwerty")])
>>> foo[1]
'asdf'
>>> foo[2]
'qwerty'
>>> foo[3] is None
True
回答 5
我通常在这种情况下使用defaultdict。您提供一个不带任何参数的工厂方法,并在看到新键时创建一个值。当您想在新键上返回空列表之类的功能时,它会更有用(请参见示例)。
from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key'] # prints 'None'
回答 6
您可以使用dict
对象的get()
方法,就像其他人已经建议的那样。另外,根据您正在执行的操作,您可能可以使用如下try/except
套件:
try:
<to do something with d[key]>
except KeyError:
<deal with it not being there>
这被认为是处理案件的非常“ Pythonic”的方法。
回答 7
一线解决方案是:
item['key'] if 'key' in item else None
在尝试将字典值添加到新列表并想要提供默认值时,这很有用:
例如。
row = [item['key'] if 'key' in item else 'default_value']
回答 8
就像其他人说的那样,您可以使用get()。
但是要检查密钥,您也可以执行以下操作:
d = {}
if 'keyname' in d:
# d['keyname'] exists
pass
else:
# d['keyname'] does not exist
pass
回答 9
我被python2 vs python3中可能发生的事情吓了一跳。我将根据最终对python3所做的回答。我的目标很简单:检查字典格式的json响应是否给出错误。我的字典称为“令牌”,而我正在寻找的密钥是“错误”。我正在寻找键“错误”,如果不存在,则将其设置为“无”,然后检查其值为“无”,如果是,请继续执行我的代码。如果我确实拥有键“错误”,则将执行else语句。
if ((token.get('error', None)) is None):
do something
回答 10
如果可以使用False
,则还可以使用hasattr内置功能:
e=dict()
hasattr(e, 'message'):
>>> False