當我在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