2009-10-21 66 views
2

在這個question中,有人建議在字典上調用repr是將其存儲在另一個字典中的好方法。這取決於repr是否相同,無論按鍵是如何訂購的。是這樣嗎?Python中的字典是否有單一的repr值?

PS。對原始問題的最優雅的解決方案實際上是使用冷凍套件

回答

7

不,將鍵添加到字典的順序可能會影響內部數據結構。當兩個項目具有相同的散列值並結束於同一個桶中時,它們添加到字典的順序就很重要。

>>> (1).__hash__() 
1 
>>> (1 << 32).__hash__() 
1 
>>> repr({1: 'one', 1 << 32: 'not one'}) 
"{1: 'one', 4294967296L: 'not one'}" 
>>> repr({1 << 32: 'not one', 1: 'one'}) 
"{4294967296L: 'not one', 1: 'one'}" 
+1

+1:請注意,即使具有不同散列值的密鑰也可以進入同一個存儲桶。這取決於字典的實現。 – 2009-10-22 05:32:10

2

情況並非如此 - 密鑰排序是任意的。

如果你想使用字典作爲鍵,它應該被轉換成一個固定的形式(如排序後的元組)。當然,這不適用於不可哈希值的字典。

0

如果要將字典存儲在另一個字典中,則不需要先執行任何轉換。如果你想使用字典作爲另一個字典的關鍵字,那麼你需要將它轉換,理想情況下是一個鍵/值元組的排序元組。