>>> one_decimal = Decimal('1')
>>> one_complex = complex(1,0)
>>> d = {one_decimal: '1D', one_complex: '1C'}
>>> len(d)
2
>>> map(hash, d)
[1, 1]
上面,我创建了一个哈希冲突的字典,并且占用了两个槽。
>>> d[1]
'1D'
>>> d[1+0j]
'1C'
如何处理整数 1
的 getitem?索引如何设法为复杂的文字索引解析正确的值?
Python 2.7.12/Linux。
最佳答案
作为accepted answer @CoryKramer 提到的状态,哈希的相等并不意味着对象的相等。 Python 字典可以包含任意数量的具有相等哈希值的元素,只要对象本身不相等即可。
对您的问题的简短回答可能是 complex
类型的实现在 Python 库中从 2.7 开始有点不完整。正如@wim 指出的那样,使用 ==
比较 int
和 complex
效果很好,但是比较 Decimal
和 complex
没有。由于比较 one_decimal == one_complex
将始终返回 False
因为它们的类型,它们可以在 Python 2.7 中存在于同一个字典中。
此问题已在 Python 3 中修复。我正在 3.5 中进行试验,其中 one_decimal
和 one_complex
相等。运行相同的代码段后,字典包含键 one_decimal
下的 one_complex
的值,正如预期的那样(第一个键,最后一个值)。
长话短说
这是 Py2.7 的 complex
类型中的一个错误。在 Py3 中修复。
关于python - 将具有相同哈希值的两个键放入字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40225520/