如何测试三个键中的一个是否在dict中?

时间:2016-11-20 13:46:33

标签: python dictionary contains

如何测试abc中的任何一个是dict中的键?

Python中是否有一些简短的方法?

使用两个键,我可以使用

if a or b in my_dict.keys():

如何使用三个键进行相同操作?

2 个答案:

答案 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语句中起作用的值。