如何测试a
或b
或c
中的任何一个是dict中的键?
Python中是否有一些简短的方法?
使用两个键,我可以使用
if a or b in my_dict.keys():
如何使用三个键进行相同操作?
答案 0 :(得分:4)
您可以使用any()
检查任何条件是True
。假设您的dict
是:
my_dict = {
'x': 1,
'y': 2,
'a': 3 # `a` key in dict
}
为了检查词典键中是否存在任何项目,您可以执行以下操作:
>>> values_to_check = ['a', 'b', 'c'] # list of value to check
# v You do not need `.keys()` as by default `in` checks in keys
>>> any(item in my_dict for item in values_to_check)
True
答案 1 :(得分:1)
警告:if a or b in my_dict.keys():
没有按您的想法行事。例如:
>>> 'a' or 'b' in {'c': 'd', 'e': 'f'}.keys()
'a'
short-circuit evaluation的结果实际发生了什么:首先评估'a'
,如果是"truthy",则返回时不会检查其他任何内容。只有当'a'
是" falsy"将'b'
(以及仅 'b'
)与dict的密钥进行核对。
如果你在代码中添加一些括号,Python会更清楚一点:
if (a) or (b in my_dict.keys()):
您实际必须以该样式编写代码的双值版本的方式是:
if a in my_dict.keys() or b in my_dict.keys():
# ...
关于您的实际问题:
要测试任意数量的值(包括两个),您有两个选择:
if any(x in my_dict.keys() for x in (a, b, c)):
# ...
或
if my_dict.keys() & {a, b, c}: # replace keys with viewkeys in Python 2
# ...
如果您需要实际的any(...)
或True
结果,而不是&#,那么您选择的其中一个主要取决于个人品味... False
解决方案是必要的34; truthy"在if
语句中起作用的值。