如果我写:
d = { 0:'a', 1:'b' }
d[False] = 'c'
d[True] = 'd'
print(d)
I get:
{ 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)
因此,从字典的角度来看,True
and 1
无法区分False
and 0
.
没有办法“禁用”它——你不应该在字典中使用非同质键。
在这种特定情况下,一个潜在的解决方法是保留特殊的 int 值True
and False
以外1
and 0
,分别(假设您需要1
and 0
作为独立键)。例如,你可以有-1
代表True
and -2
代表False
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)