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

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


当前回答

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

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

其他回答

正如上面其他人所说,您可以使用get()。

但要检查密钥,你还可以这样做:

d = {}
if 'keyname' in d:

    # d['keyname'] exists
    pass

else:

    # d['keyname'] does not exist
    pass

一个简单的解决方案是:

item['key'] if 'key' in item else None

这在尝试将字典值添加到新列表并希望提供默认值时非常有用:

eg.

row = [item['key'] if 'key' in item else 'default_value']

使用dict.get

如果key在字典中,则返回key的值,否则为默认值。如果没有给出default,则默认为None,因此该方法永远不会引发KeyError。

您应该使用dict类中的get()方法

d = {}
r = d.get('missing_key', None)

这将导致r == None。如果在字典中没有找到键,get函数返回第二个参数。

你可以使用dict.get()

value = d.get(key)

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

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