2017-05-25 119 views
0

我正在瀏覽一些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'} 

如果包括布爾到字典是否只發生?

回答

3

問題是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)。與任何分配一樣,顯示的值是最後一個。

+1

可能值得添加一個註釋,它保證了最後一個值被取代,因爲「{True:1,1:2,1:3}」變成了「{True:3}」,這個實際上可以用於某些事情 –

+1

這就是分配的工作原理;它只是不像字典構造公然。但是,我添加了註釋並將其擴展到標籤。 – Prune

0

Python dict是一個哈希映射 - 它通過哈希函數對其鍵進行索引,以在內存中進行快速查找。由於hash(1) is hash(True)的評估版本爲True,因此Python認爲它們幾乎是同一個關鍵。因此,在Python中的任何類型的散列存儲中都不能同時存在1True(即不執行自己的散列函數)。

相關問題