如果Dictionary键不可用,则返回None
我需要一种方法来获取字典值,如果它的关键字存在,或者只是返回None,如果没有。
但是,如果您search不存在的键,Python将返回一个key_error。 我知道我可以检查关键,但我正在寻找更明确的东西。 有没有办法只是返回None,如果密钥不存在?
你可以使用get()
value = d.get(key)
如果key is not in d
,将返回None
。 你也可以提供一个不同的默认值,而不是None
:
value = d.get(key, "empty")
不要再想了 它是build立在语言。
>>>帮助(字典) 帮助模块builtins中的类dict: 类字典(对象) | dict() - >新的空字典 | 字典(映射) - >从映射对象的初始化新字典 | (键,值)对 ... | | 得到(...) | D.get(k [,d]) - > D [k]如果k在D中,否则为d。 d默认为None。 | ...
使用dict.get
你应该使用dict
类的get()
方法
d = {} r = d.get( 'missing_key', None )
这将导致r == None
。 如果在字典中找不到键,则get函数将返回第二个参数。
如果你想要一个更透明的解决scheme,你可以通过子类来获得这个行为:
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
我通常使用defaultdict来处理这种情况。 您提供了一个不带参数的工厂方法,并在它看到一个新的密钥时创build一个值。 当你想在新的键上返回一个空的列表时,它会更有用( 请看例子 )。
from collections import defaultdict d = defaultdict(lambda: None) print d['new_key'] # prints 'None'
您可以使用dict
对象的get()
方法,正如其他人已经build议的那样。 另外,根据你在做什么,你可能会使用这样的try/except
套房:
try: <to do something with d[key]> except KeyError: <deal with it not being there>
这被认为是一个非常“pythonic”的方法来处理案件。
正如其他人上面所说,你可以使用get()。
但要检查一个密钥,你也可以这样做:
d = {} if 'keyname' in d: # d['keyname'] exists pass else: # d['keyname'] does not exist pass
您可以通过inheritancedict来覆盖缺less的 (self,key)并返回None。
class MyDict(dict): def __missing__(self, key): return None
还有一些内置的function:
e={} if hasattr(e, 'message'): print(e['message']) else: print("no %s key" % 'message')