我需要检查一个值是否接近字典键中的某个值。例如,我下面有一个字典temp,有4个键;1、10、20、30。如果我像这样写代码,它是有意义的。
temp = {1:2, 10:4, 20:5, 30:12}
10 in temp.keys()
>> True
15 in temp.keys()
>> False
但是如果我像这样编码,它显示了我没有预料到的结果。因为x+1 = 10,而且这个值肯定在字典的键中。
x = 9
(x-2 or x-1 or x or x+1 or x+2) in temp.keys()
>>False
我错过什么了吗?我想知道如何解决这个问题。请帮帮我由于
您可以使用any
:
>>> temp = {1: 2, 10: 4, 20: 5, 30: 12}
>>> x = 9
>>> any(val in temp.keys() for val in (x - 2, x - 1, x, x + 1, x + 2))
True
>>> any(x + dx in temp.keys() for dx in range(-2, 2 + 1))
True
>>> any(val in temp.keys() for val in range(x - 2, x + 3)))
True
Input: 1 or 2 or 3
Output: 1
Input: 1 and 2 and 3
Output: 3
从上面的例子可以看出。or
给出第一个真值and
给出最后一个真值
问题在于:
(x-2 or x-1 or x or x+1 or x+2)
这一行不充当布尔表达式。相反,它给出了x - 2
的值。在您的情况下,它将是7
。7
不在键中。所以是False