python 2.7 存在于字典中

标签 python python-2.7

我想测试字典中是否存在键,因为“如果键不在字典中:做某事” 我已经多次这样做了,但这次它的行为很奇怪。

特别是:

termCircuit = termCircuitMap[term]

返回键错误

当我在 Eclipse PyDev 中调试此代码时,我得到以下信息(使用表达式):

term in termCircutiMap        # prints False
term in termCircuitMap.keys() # prints True

有人知道这是怎么可能的吗?我认为如果某些东西“在”键集中,那么它就在“字典中”。

我附上了评估的屏幕截图。

http://img836.imageshack.us/img836/1274/screenshotpython.png

非常感谢您的解释:)

最佳答案

如果您的 key 的 __hash__ 函数未正确定义,您可能会看到此行为。例如,以下给出与您描述的大致相同的行为:

import random

class Evil(int):
    def __hash__(self):
        return random.randint(0, 10000)

evil_vals = [Evil(n) for n in range(10)]

dict_with_evil_keys = dict((evil_val, None)
                           for evil_val in evil_vals)

print evil_vals[0] in dict_with_evil_keys # prints False
print evil_vals[0] in dict_with_evil_keys.keys() # prints True

在这种情况下,我生成随机哈希值,这显然是个坏主意。如果您的键值是可变的,则可能会产生同样效果的不太明显的问题。 (通常,可变值不应该定义 __hash__,也不应该用作字典中的键。)

关于python 2.7 存在于字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16200067/

相关文章:

python - 模拟不适用于模块功能

python - conda环境不读取依赖项

python - 使用 Python 从文本文件中解析多个 json 对象

python - 海上距离计算器,中间坐标?

python - 如何将列表作为新行附加到 pandas 数据框

python - 第二个def上的语法错误

python - 通过python将 'th' 'st' 'rd' 'nd'的日期字符串转换为日期格式

python - pyodbc 在 SQL Server 中创建表时出错

python - Pandas - 将值转换为 1 和 0 的快速方法

python - 如何动态地为 Python 中的类属性赋值?