python - 字典强制有意还是无意?

标签 python python-3.x dictionary

如果我写:

d = { 0:'a', 1:'b' }
d[False] = 'c'
d[True] = 'd'
print(d)

我得到:

{ 0:'c', 1:'d' }

为什么要将它们强制转换为整数?它以相反的方式做同样的事情。

d = {False:'a', True:'b'}
d[0] = 'c'
d[1] = 'd'
print(d)

输出是:

{False:'c', True: 'd'}

这可以禁用吗?是错误吗?

最佳答案

这是因为这些值被认为是相等的:

>>> True == 1
True
>>> 
>>> False == 0
True

并且具有相同的哈希值:

>>> hash(True), hash(1)
(1, 1)
>>> 
>>> hash(False), hash(0)
(0, 0)

因此,从字典的角度来看,True1False0 是无法区分的.

没有办法“禁用”此功能——您一开始就不应该在字典中使用非同类键。

在这种特定情况下,一个潜在的解决方法是为 TrueFalse 保留特殊的 int 值,而不是 10 ,分别(假设您需要 10 作为独立的键)。例如,您可以让 -1 代表 True,让 -2 代表 False

关于python - 字典强制有意还是无意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851331/

相关文章:

python - 使用字典将数组转换为列表

python - 通过乘法将两个 python 字典与元组组合起来 - Python 3.x

python - 将数据帧转换为字典,如图所示

python - 字典中值之间的百分比差异

c++ - 重载 map::key_comp 以便我可以在对象指针映射上使用 map::find

python - Django fr-ca、es-us 国际化问题

python - 循环遍历像素图像以找到该像素与任意值的最接近的值

python - 将变量从 python 实时传递到 C 的最佳方法

python-3.x - pytorch collat​​e_fn 拒绝样本并产生另一个

python - 为什么在更改超时变量后,Amazon RDS 上的 MySQL 不断使我的连接超时?