如何检查字典中是否存在某个键?

401
假设我有一个类似下面的关联数组:{'key1': 22, 'key2': 42}

我该如何检查字典中是否存在key1


1
在Python 3中,你可以直接使用'key1' in {'key1': 22, 'key2': 42}.keys()来引用字典中的keys()方法。 - Eat at Joes
3个回答

715
if key in array:
  # do something

在Python中,关联数组被称为字典。您可以通过stdtypes文档了解更多信息。


41
如果关键字是字符串,请确保用引号将其括起来。 - JAL
27
如果key不在数组中。 - Spencer Wood
11
这个回答中的“array”一词来自哪里? - Ray Salemi
12
作为被接受的答案,这个答案很糟糕。它完全没有回答问题,只是一篇傲慢的文档链接。很遗憾谷歌排名如此之高。 - cstrutton
7
@cstrutton,请提出改进建议。写下这个答案时,我感觉不需要更多细节。 - Rafał Rawicki
显示剩余8条评论

65

如果您想要检索键的值(如果存在),您还可以使用

try:
    value = a[key]
except KeyError:
    # Key is not present
    pass
如果你想在键值不存在时获取默认值,请使用value = a.get(key, default_value)。 如果你想在键值不存在时同时设置默认值,请使用value = a.setdefault(key, default_value)

17
需要注意的是,只有在您预计键几乎100%存在的情况下,才应该使用try/except语句。否则,使用if in语句更加优美和高效。感谢提到其他可能性。 - aaronasterling
有趣的是,我记得在官方文档中读到过这样一句话:“宁愿请求宽恕,也不要事先征得许可……” - Yannic Hamann
从性能的角度来看,如果你正在处理具有许多键的字典,则使用try/expect更好。 - Avo Asatryan

63

另一种方法是has_key()(如果仍在使用Python 2.X):

>>> a={"1":"one","2":"two"}
>>> a.has_key("1")
True

38
has_key在Python 3中已被弃用并移除,在Python 2中速度降低了一半。 - aaronasterling
7
是的,它在2.x版本中已经被弃用了,并且在Python 2.x中速度只有原来的一半。 - aaronasterling
8
“deprecated”适用于所有新代码。一旦被“deprecated”,就不再使用它。 - aaronasterling
6
2.2版本以来,'key in dict'的形式已经存在。 - Tim W.
11
我们可以无穷无尽地讨论这个问题,但事实仍然如此:对于小于等于2.5的情况,这仍然是一个备选项。 - ghostdog74
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接