python - 将具有相同哈希值的两个键放入字典中

标签 python dictionary python-2.x

>>> 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 指出的那样,使用 == 比较 intcomplex 效果很好,但是比较 Decimalcomplex 没有。由于比较 one_decimal == one_complex 将始终返回 False 因为它们的类型,它们可以在 Python 2.7 中存在于同一个字典中。

此问题已在 Python 3 中修复。我正在 3.5 中进行试验,其中 one_decimalone_complex 相等。运行相同的代码段后,字典包含键 one_decimal 下的 one_complex 的值,正如预期的那样(第一个键,最后一个值)。

长话短说

这是 Py2.7 的 complex 类型中的一个错误。在 Py3 中修复。

关于python - 将具有相同哈希值的两个键放入字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40225520/

相关文章:

python - 返回作为参数传递的相同值的模拟方法

python - 如何计算整数的各个数字之和并在末尾打印原始整数?

python - matplotlib改变jpg图像颜色

java - 具有多态泛型的映射

python - 在 Python 2 中将多个列表和字典解包为函数参数

python - pythonpath 应该有特定于 python2 和 python3 的目录吗?

python - 将自定义文件格式读取到 Dask 数据框

python - 从字典中删除重复项

像 dict 这样的 Python 数据结构

python - 关于python编码的问题