检查Python字典中是否存在键/值对

时间:2016-04-17 20:21:20

标签: python dictionary

如果我不知道密钥存在,检查字典中是否存在某个键/值对的最短路径是什么?

到目前为止,我已经提出了:

if 'key' in my_dict and my_dict['key'] == 'value':
    do_something()

对于更长的变量名称或更长的键/值名称,这确实很长,例如:

if 'X-Powered-By' in self.request.headers and self.request.headers['X-Powered-By'] == 'NodeBB':
    do_something()

检查是否存在密钥和相应值的更短方法是什么?

4 个答案:

答案 0 :(得分:7)

您可以获取该值,并立即进行比较:

# default return value is None if key is not found
if mydict.get("key") == "somevalue" 

# Or specify your own default value
if mydict.get("key", False) == "somevalue"

查看Python dict.get docs

答案 1 :(得分:2)

实际上,没有一个答案可以解决完整的问题。如果要查询的值恰好是None或者提供的默认值,则基于get()的解决方案将失败。以下可能是最普遍适用的解决方案,不依赖于默认值,真正检查密钥的存在(与get()不同),而不是超过 - '除了' -ing KeyError s(与其他try-except答案不同),同时仍使用O(1) dict查询(与items()方法不同):

try:
    assert my_dict[key] == value:
except (KeyError, AssertionError):
    do_sth_else()  # or: pass
else:
    do_something()

答案 2 :(得分:0)

如果您只是寻找钥匙的存在

if not 'key' in my_dict:
    my_dict['key'] = 'some default value'

答案 3 :(得分:-1)

好的,我的建议是,让你的代码更具可读性:

headers = self.request.headers
if headers.get('X-Powered-By') == 'NodeBB':
    do_something()

这可能是另一个短代码但绝对效率不高作为dict.get

if ('X-Powered-By', 'NodeBB') in self.request.headers.items():
    do_something()