布尔值作为字典中的键导致奇怪的问题?

时间:2017-08-13 07:16:15

标签: python dictionary

我是Python的新手,我目前正在学习字典。我把随机值和类型放在字典中。这让我很困惑:

stuff = {True: 1234, 1: 2}
print(stuff[True])
print(len(stuff))

运行此代码时,输​​出为:

2
1

这是如何输出的?我不应该print(stuff[True])输出1234print(len(stuff))输出2吗?我可能会遗漏一些非常明显的东西,但有人可以解释一下发生了什么吗?

1 个答案:

答案 0 :(得分:0)

尽管python是动态类型的,但在字典中使用异构密钥类型被认为是一种不好的做法。

正在运行{True: 'a', 1: 'b', 1.0: 'c'}实际上会映射到{True: 'c'}

这是因为1==1.01==True,因此它们具有相同的hash

最终结果是,将使用第一个键,最后一个值将被更新。

如果您出于某种原因要将True1分开,请将其类型用作关键字(例如(x, type(x))

{(True, type(True)): 'a',(1, type(1)): 'b', (1.0, type(1.0)): 'c'}