當我在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. 爲什麼`a == b或c或d`總是評估爲True?
- 2. 什麼是gsub(/(\ d {4})\ /(\ d \ d)\ /(\ d \ d)\ /(。*)/,'\ 1- \ 2- \ 3- \ ) 意思?
- 3. Common Lisp爲什麼(列表+ 1 2)評估爲('(+ 1 2)1 2)
- 4. 「$ K2ko {$ D} {$ C} = 1」在perl中做什麼?
- 5. 爲什麼表達式(0 == 0&1 == 1)評估爲False?
- 6. 在Ruby中,爲什麼nil [1] = 1評估爲零?
- 7. 爲什麼1 [1]評估爲在javascript中未定義?
- 8. 爲什麼「(奇數和1)= 1」評估爲真?
- 9. 爲什麼-1/2在C++中評估爲0,但在Python中爲-1?
- 10. 爲什麼a =評估爲零?
- 11. 什麼是2 + 1-D時空視頻?
- 12. 什麼是stringWithFormat:@「%1 $ @%2 $ d」呢?
- 13. 這個正則表達式應該做什麼?^[\ d \ d {1,} $
- 14. {a,b,c,d,e} a,b-> c,a,b-> d和d-> e的最高範式是什麼?
- 15. 優化循環。更快的ResultList.append([c,d,c [1]/d [1]])?陣列?地圖?
- 16. 在Javascript中,爲什麼[1,2] == [1,2]或({a:1})==({a:1})爲false?
- 17. 使用MsgBox(d)和Console.WriteLine(d)時,雙舍入爲1
- 18. scipy.sparse.hstack(([1],[2])) - >「ValueError:blocks must be 2-D」。爲什麼?
- 19. NumPy - 將數組重塑爲1-D
- 20. 爲什麼評估「(Double.MinValue + 1)> Double.MinValue」爲false?
- 21. 爲什麼「(1/6)*(66.900009-62.852596)」評估爲零?
- 22. 爲什麼[1] .append(2)評估爲None而不是[1,2]?
- 23. 爲什麼`to_unsigned(0,4)> = -1`在運行時評估爲`FALSE`?
- 24. 爲什麼+和*分別評估爲0和1?
- 25. 爲什麼$((true == false))在bash中評估爲1?
- 26. 1-d指針2-d陣列
- 27. 如果char c = 0x80,爲什麼printf(「%d \ n」,c << 1)輸出-256?
- 28. 爲什麼流水作業對於(a + b)+(c + d)比對a + b + c + d更好?
- 29. 爲什麼\ d \ +或\ d +在這裏不等於\ d *?
- 30. 從(n)D陣列中選擇n-1個(n-1)D陣列
字典的鍵必須是唯一的,如果您使用相同的鍵只有最後一個將保留。 – eyllanesc