我需要一种方法来获得字典值,如果它的键存在,或简单地返回None,如果它不存在。

然而,如果你搜索一个不存在的键,Python会引发一个KeyError异常。我知道我可以检查钥匙,但我在寻找更明确的东西。如果键不存在,是否有一种方法只返回None ?


当前回答

如果你可以使用False,那么,还有hasattr内置函数:

e=dict()
hasattr(e, 'message'):
>>> False

其他回答

我被python2 vs python3的功能吓了一跳。我将根据我最终为python3所做的工作来回答这个问题。我的目标很简单:检查字典格式的json响应是否出错。我的字典叫“令牌”,我要找的键是“错误”。我正在寻找键“错误”,如果它不在那里设置为None的值,然后检查是值为None,如果是这样,继续我的代码。如果我确实有键“错误”,else语句将处理。

if ((token.get('error', None)) is None):
    do something

你可以使用dict.get()

value = d.get(key)

如果key不在d中,返回None。你也可以提供一个不同的默认值来代替None:

value = d.get(key, "empty")

我通常在这种情况下使用defaultdict。您提供一个不接受参数的工厂方法,并在看到新键时创建一个值。当您希望在新键上返回一个空列表之类的内容时,它会更有用(请参阅示例)。

from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key']  # prints 'None'

您可以使用dict对象的get()方法,正如其他人已经建议的那样。或者,根据你正在做的事情,你可以使用try/except套件,像这样:

try:
   <to do something with d[key]>
except KeyError:
   <deal with it not being there>

这被认为是处理这种情况的一种非常“python”的方法。

不要再疑惑了。这是内置在语言中的。

    >>> help(dict)

    Help on class dict in module builtins:

    class dict(object)
     |  dict() -> new empty dictionary
     |  dict(mapping) -> new dictionary initialized from a mapping object's
     |      (key, value) pairs
    ...
     |  
     |  get(...)
     |      D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
     |  
    ...