如果我不知道密钥存在,检查字典中是否存在某个键/值对的最短路径是什么?
到目前为止,我已经提出了:
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()
检查是否存在密钥和相应值的更短方法是什么?
答案 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"
答案 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()