我是Python的新手,我目前正在学习字典。我把随机值和类型放在字典中。这让我很困惑:
stuff = {True: 1234, 1: 2}
print(stuff[True])
print(len(stuff))
运行此代码时,输出为:
2
1
这是如何输出的?我不应该print(stuff[True])
输出1234
而print(len(stuff))
输出2
吗?我可能会遗漏一些非常明显的东西,但有人可以解释一下发生了什么吗?
答案 0 :(得分:0)
尽管python是动态类型的,但在字典中使用异构密钥类型被认为是一种不好的做法。
正在运行{True: 'a', 1: 'b', 1.0: 'c'}
实际上会映射到{True: 'c'}
,
这是因为1==1.0
和1==True
,因此它们具有相同的hash
。
最终结果是,将使用第一个键,最后一个值将被更新。
如果您出于某种原因要将True
和1
分开,请将其类型用作关键字(例如(x, type(x))
)
{(True, type(True)): 'a',(1, type(1)): 'b', (1.0, type(1.0)): 'c'}