如果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')