2010-12-16 55 views

回答

17

該命令與他們如何在內部工作以及他們在散列表中以什麼順序結束有關。這又取決於鍵的哈希值,它們被插入的順序以及您正在使用的Python實現。

順序是任意的(但不是隨機的),它永遠不會有用,知道它將是什麼樣的順序。

要獲得排序的密鑰列表,只需使用sorted(D),在您的情況下將返回['a', 'b', 'c']

+1

如果你想知道字典是如何工作的,請看這個:http://us.pycon.org/2010/conference/schedule/event/12/ – DisplacedAussie 2010-12-16 08:31:01

+0

我無法訪問上面的鏈接 – SKT 2015-07-20 09:42:04

+0

我認爲這可能是這樣的話題: https://www.youtube.com/watch?v=C4Kc8xzcA68 – 2015-07-20 12:35:39

5

the documentation

最好是認爲一個字典作爲一個無序的關鍵的:值對,該密鑰是唯一的要求(一個字典之內)。

+0

謝謝,我知道字典是無序的。所以Python的東西只是混淆了我,因爲它改變了顯示順序。 – QQending 2010-12-16 06:55:44

+2

明確表示訂單可隨時更改。這樣可以加快實施速度。如果您需要特定順序的鑰匙,可以對它們進行分類。 – 2010-12-16 07:01:22

+2

QQending:無序的意思(除其他外)你排出的順序可能不是你輸入的順序,那麼爲什麼pythons的行爲會混淆?如果您想知道爲什麼它執行「排序」命令以外的其他操作,則字典使用散列表,而不是搜索樹。排序可能會基於關鍵模塊的當前大小的散列或者同樣不可預測的東西。 – 2010-12-16 07:09:01

2

以任何順序它喜歡。這是字典的性質。如果您想以特定的順序,你必須自己做:

>>> d = {'pax': 1, 'george': 2, 'guido' : 3} 

>>> d 
{'pax': 1, 'george': 2, 'guido': 3} 

>>> [(key,d[key]) for key in sorted(d)] 
[('george', 2), ('guido', 3), ('pax', 1)] 
+0

不完全正確:Lennart的答案在技術上更加正確「訂單是任意的(但不是隨機的)」。 – 2010-12-16 08:49:48

+1

我沒有提到「隨機」,只是字典沒有指定順序。它可以按照它認爲合適的順序返回它們。基於內容和操作歷史,它可能以確定性的順序返回,這一事實絕不會解決你自己排序的責任,如果這是你想要的:「字典對象的keys()方法返回所有字典中使用的鍵,以任意順序排列(如果你想排序,只需使用sorted()函數)「。 – paxdiablo 2010-12-16 10:16:36