当我在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'}”?
0
A
回答
3
Python使用与==
运算符使用的相同的相等性测试。您使用的所有密钥(1
,True
,1.0
和1.00
)的比较结果均相等。你的字典发生了什么,它保留了第一个关键字,然后更新与该关键字相关的值,以便所有随后的关键字与其相等。这有点不直观,因为关键值不一样(除了1.0
和1.00
),但它们是“相等的”。
类似地,{1: 'd'}[True]
的计算结果为'd'
,因为True == 1
。
+0
哦,谢谢!当我向我的字典中添加混合值时,我非常困惑,因为我解析了一个csv文件。我把它归结为'{1:'a',真:'b',1.0:'c',1.00:'d'}'。 –
1
所有值1,True,1.0和1.00是相等的(1.0和1.00是完全相同的值)。所以他们都被认为是字典中的同一个关键。你不能有一个与多个相同的密钥字典。
1
Python不支持字典中的重复键。
在该示例中,所有密钥都相同(True==1
评估为True
)。
所以Python会放弃除最后一个键外的每个键值。
相关问题
- 1. 什么是gsub(/(\ d {4})\ /(\ d \ d)\ /(\ d \ d)\ /(。*)/,'\ 1- \ 2- \ 3- \ ) 意思?
- 2. Common Lisp为什么(列表+ 1 2)评估为('(+ 1 2)1 2)
- 3. 在Ruby中,为什么nil [1] = 1评估为零?
- 4. 为什么1 [1]评估为在javascript中未定义?
- 5. 为什么表达式(0 == 0&1 == 1)评估为False?
- 6. 为什么a =评估为零?
- 7. 什么是stringWithFormat:@“%1 $ @%2 $ d”呢?
- 8. {a,b,c,d,e} a,b-> c,a,b-> d和d-> e的最高范式是什么?
- 9. 在Javascript中,为什么[1,2] == [1,2]或({a:1})==({a:1})为false?
- 10. scipy.sparse.hstack(([1],[2])) - >“ValueError:blocks must be 2-D”。为什么?
- 11. 1-d指针2-d阵列
- 12. 为什么评估“(Double.MinValue + 1)> Double.MinValue”为false?
- 13. 为什么$((true == false))在bash中评估为1?
- 14. 为什么`to_unsigned(0,4)> = -1`在运行时评估为`FALSE`?
- 15. 如果char c = 0x80,为什么printf(“%d \ n”,c << 1)输出-256?
- 16. 为什么\ d \ +或\ d +在这里不等于\ d *?
- 17. 为条件执行MCDC(A && B && C)|| D
- 18. 为什么printf(“%d%d%d”,++ i,i,i ++)是未定义的行为?
- 19. SQL条件:(A = B AND C LIKE%D%)或(A LIKE%B%和C = D)
- 20. 为什么Python需要永远评估1 ** 4 ** 4 ** 4 ** 4?
- 21. excel - 计数空白单元格(将A转换为1,D转换为4.etc)
- 22. 为什么使用日期%d /%m /%Y将0000-00-00转换为30/11/-1?
- 23. a.toString()代替(/ ^(\ d)$/“0 $ 1”)
- 24. D的编译时间评估的用例是什么
- 25. 如何写A :: B :: C => D给定A :: B :: C和(A,B,C)=> D?
- 26. 什么呢scanf函数( “%d%d”,&A&B)== 2指
- 27. 为什么a,b = 1不允许?
- 28. 为什么[1,[2,3] = [1,[2,3]]
- 29. 为什么“1”等于“+1”?
- 30. REGEX是什么意思? [a-zA-Z] | \ d
字典的键必须是唯一的,如果您使用相同的键只有最后一个将保留。 – eyllanesc