2013-05-25 74 views
1

我想知道在python存儲鍵:值對中的字典以什麼順序。我在我的python shell中編寫了以下內容,但我無法弄清楚它存儲關鍵字的順序的原因是什麼:值對。python存儲數據中的字典按什麼順序?

>>> d = {} 
>>> d['a'] = 8 
>>> d['b'] = 8 
>>> d 
{'a': 8, 'b': 8} 
>>> d['c'] = 8 
>>> d 
{'a': 8, 'c': 8, 'b': 8} 
>>> d['z'] = 8 
>>> d 
{'a': 8, 'c': 8, 'b': 8, 'z': 8} 
>>> d['w'] = 8 
>>> d 
{'a': 8, 'c': 8, 'b': 8, 'z': 8, 'w': 8} 

我也試過同樣的事情,對於相同的鍵不同的值。但訂單保持不變。增加一個關鍵字:值對提供了另一個無法辨認的結果。這裏是:

>>> d[1] = 8 
>>> d 
{'a': 8, 1: 8, 'c': 8, 'b': 8, 'w': 8, 'z': 8} 
+0

沒有保證排序;插入和刪除以及關鍵值決定了排序。 –

+0

字典在python中是無序的,在列表和元組中,@Indradhanush Gupta在評論中有一個很好的鏈接 –

+0

@MartijnPieters我使用了另一個名爲c的字典。它有相同的順序。 –

回答

3

簡短的回答是:按照實現定義的順序。你不能依賴也不應該期望任何特定的順序,並且在以一種所謂無關的方式改變字典之後它可以改變。

雖然不是直接的,它以某種方式在Dictionary view objects解釋說:

鍵和值遍歷在非隨機的,不同的Python實現不同而不同,取決於插入的字典歷史上的一個任意次序和刪除。如果按鍵,值和項目視圖被重複執行而不對詞典進行中間修改,則項目順序將直接對應。

1

詞典沒有可預測的順序,因爲它們的鍵由散列存儲。如果您需要訂購,請使用listcollections.OrderedDict

1

這是一個hash table。密鑰部分按其散列值hash(key)排序,但字典的實際遍歷順序可能取決於元素插入的順序,字典中元素的數量以及可能的其他因素。你永遠不應該指望它是什麼特別的東西。