如果我写:
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)
因此,从字典的角度来看,True
和 1
与 False
和 0
是无法区分的.
没有办法“禁用”此功能——您一开始就不应该在字典中使用非同类键。
在这种特定情况下,一个潜在的解决方法是为 True
和 False
保留特殊的 int 值,而不是 1
和 0
,分别(假设您需要 1
和 0
作为独立的键)。例如,您可以让 -1
代表 True
,让 -2
代表 False
。
关于python - 字典强制有意还是无意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851331/