我尝试检查具有多个条件的字典中的所有值。使用此代码,例如检查所有值是否均等于1毫无问题:
config = {"a": 1, "b": 1, "c": 1, "d": 3, "e": 2}
if all(value == 1 for value in config.values()):
print('correct')
else:
print('wrong')
但是现在,如果要在此代码中添加一些运算符以检查所有值是否均为1或2或3,例如结果无法正常运行:
config = {"a": 1, "b": 1, "c": 1, "d": 3, "e": 5}
if all(value == (1 or 2 or 3) for value in config.values()):
print('correct')
else:
print('wrong')
>>>correct
我还尝试了许多变体,例如:
if all(value == 1 or 2 or 3 for value in config.values()):
if all((value == 1 or 2 or 3) for value in config.values()):
if all(value for value in config.values() == 1 or 2 or 3):
...
那么请如何正确使用这些运算符来完成这项工作?
答案 0 :(得分:2)
all
内有一个生成器表达式(可以用任何可迭代的表达式替换),因此请像使用它一样使用
all(value in {1, 2, 3} for value in config.values())
value == (1 or 2 or 3)
不起作用,因为它被视为:
value = 1
1 or 2 or 3
将返回1 * ,因此将所有值的等式与1进行比较。
* or
链将返回链中的第一个 truthy 值或最后一个值作为默认值(无论其是否真实)。>