2010-02-18 107 views
1

爲什麼Python中的字典似乎顛倒了?爲什麼字典似乎被顛倒?

>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'} 
>>> a 
{'four': '4', 'three': '3', 'two': '2', 'one': '1'} 

我該如何解決這個問題?

+1

「修復」是什麼意思?你會喜歡什麼樣的順序? – 2010-02-18 20:31:04

回答

16

Python中的字典(以及一般的哈希表)是無序的。在Python中,您可以使用鍵上的sort()方法對它們進行排序。

+0

好吧,我將使用鍵/值 – myfreeweb 2010-02-18 19:44:58

0

你會期待什麼是「標準訂單」?它非常依賴於應用程序。一個python字典並不能保證密鑰排序。

在任何情況下,您都可以按照您想要的方式迭代字典keys()。

5

詞典沒有固有的順序。你必須要麼滾動你自己的命令字典執行,使用ordered list of tuples或使用existing ordereddict implementation

+0

404.斷開鏈接! – myfreeweb 2010-02-18 19:44:35

+0

@myfreeweb:有兩個鏈接,我可以訪問他們兩個http://www.voidspace.org.uk/python/odict.html http://code.activestate.com/recipes/107747/ – voyager 2010-02-18 20:11:53

2

現在你知道類型的字典是無序的,這裏是如何將它們轉換爲您可以爲了

>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'} 
>>> a 
{'four': '4', 'three': '3', 'two': '2', 'one': '1'} 

通過關鍵

>>> sorted(a.items()) 
[('four', '4'), ('one', '1'), ('three', '3'), ('two', '2')] 

分類排序由值列表

>>> from operator import itemgetter 
>>> sorted(a.items(),key=itemgetter(1)) 
[('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')] 
>>> 
0

Python Tutorial

最好是認爲字典作爲 一組無序的鍵:值對

而且從Python Standard Library(約dict.items):

CPython實現細節:鍵 和值以任意 的順序列出,它是非隨機的,變化爲跨Python實現的和 取決於字典的 插入和刪除的歷史記錄。

所以,如果你需要處理的一定順序的字典,排序鍵或值,例如:

>>> sorted(a.keys()) 
['four', 'one', 'three', 'two'] 
>>> sorted(a.values()) 
['1', '2', '3', '4'] 
5

Python3.1OrderedDict

>>> from collections import OrderedDict 
>>> o=OrderedDict([('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')]) 
>>> o 
OrderedDict([('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')]) 
>>> for k,v in o.items(): 
... print (k,v) 
... 
one 1 
two 2 
three 3 
four 4 
+0

太棒了。但是我沒有對Python 2進行排序。 – myfreeweb 2010-02-19 12:54:32

+0

Orderedicts中的項目按項目添加到詞典時排序,而不是按鍵或項目。所以,如果你不按順序添加項目 - OrderedDict不會幫助:-) – 2014-09-22 12:30:06