为什么“{1:'a',True:'b',1.0:'c',1.00:'d'}”评估为“{1:'d'}”?

为什么“{1:'a',True:'b',1.0:'c',1.00:'d'}”评估为“{1:'d'}”?

问题描述:

当我在Python shell中输入表达式{1: 'a', True: 'b', 1.0: 'c', 1.00: 'd'}时,我找回了{1: 'd'}。但是当我写{1: 'a', True: 'b', 1.0: 'c', 1.00: 'd'} [True]时,口译员给我回复'd'。我不明白这本字典评估是如何工作的。为什么“{1:'a',True:'b',1.0:'c',1.00:'d'}”评估为“{1:'d'}”?

+1

字典的键必须是唯一的,如果您使用相同的键只有最后一个将保留。 – eyllanesc

Python使用与==运算符使用的相同的相等性测试。您使用的所有密钥(1,True,1.01.00)的比较结果均相等。你的字典发生了什么,它保留了第一个关键字,然后更新与该关键字相关的值,以便所有随后的关键字与其相等。这有点不直观,因为关键值不一样(除了1.01.00),但它们是“相等的”。

类似地,{1: 'd'}[True]的计算结果为'd',因为True == 1

+0

哦,谢谢!当我向我的字典中添加混合值时,我非常困惑,因为我解析了一个csv文件。我把它归结为'{1:'a',真:'b',1.0:'c',1.00:'d'}'。 –

所有值1,True,1.0和1.00是相等的(1.0和1.00是完全相同的值)。所以他们都被认为是字典中的同一个关键。你不能有一个与多个相同的密钥字典。

Python不支持字典中的重复键。

在该示例中,所有密钥都相同(True==1评估为True)。
所以Python会放弃除最后一个键外的每个键值。