我正在瀏覽一些python字典鏈接並找到它。與字典中的其他數據類型的布爾鍵
我似乎無法理解底下發生了什麼。
dict1 = {1:'1',2:'2'}
print dict1
輸出
{1:'1',2:'2'}
但是,如果我添加一個布爾關鍵字典,它給了一個很奇怪。
dict2 = {True:'yes',1:'1',2:'2'}
print dict2
輸出
{True:'1',2:'2'}
如果包括布爾到字典是否只發生?
我正在瀏覽一些python字典鏈接並找到它。與字典中的其他數據類型的布爾鍵
我似乎無法理解底下發生了什麼。
dict1 = {1:'1',2:'2'}
print dict1
輸出
{1:'1',2:'2'}
但是,如果我添加一個布爾關鍵字典,它給了一個很奇怪。
dict2 = {True:'yes',1:'1',2:'2'}
print dict2
輸出
{True:'1',2:'2'}
如果包括布爾到字典是否只發生?
問題是True
是一個值爲1
的內置枚舉。因此,哈希函數將True
看作簡單的另一個1
,並且......好吧,如你所見,這兩者會對重新映射感到困惑。是的,有一些明確的規則描述了Python如何解釋這些規則,但是在這個級別上你可能不關心過去False = 0和True = 1的任何事情。
您看到的標籤(例如True和1)在第一個參考中設置。例如:
>>> d = {True:11, 0:10}
>>> d
{0: 10, True: 11}
>>> d[1] = 144
>>> d
{0: 10, True: 144}
>>> d[False] = 100
>>> d
{0: 100, True: 144}
注意是如何工作的:每個字典條目顯示第一標籤是看到了每個給定值(0 /假,1/TRUE)。與任何分配一樣,顯示的值是最後一個。
Python dict
是一個哈希映射 - 它通過哈希函數對其鍵進行索引,以在內存中進行快速查找。由於hash(1) is hash(True)
的評估版本爲True
,因此Python認爲它們幾乎是同一個關鍵。因此,在Python中的任何類型的散列存儲中都不能同時存在1
和True
(即不執行自己的散列函數)。
可能值得添加一個註釋,它保證了最後一個值被取代,因爲「{True:1,1:2,1:3}」變成了「{True:3}」,這個實際上可以用於某些事情 –
這就是分配的工作原理;它只是不像字典構造公然。但是,我添加了註釋並將其擴展到標籤。 – Prune