2013-03-25 138 views
16

我試圖通過鍵排序字典,但沒有機會。 這是我的字典:Python:如何按鍵排序字典

result={'1':'value1','2':'value2',...} 

我使用Python2.7,我發現這個

keys = result.keys() 
keys.sort() 

但這不是我所期待的,我有​​一個未排序的字典。

回答

7

標準Python字典本質上是無序的。但是,您可以使用collections.OrderedDict。它保留插入順序,因此,所有你需要做的就是添加鍵/值對所需的順序:

In [4]: collections.OrderedDict(sorted(result.items())) 
Out[4]: OrderedDict([('1', 'value1'), ('2', 'value2')]) 
+1

如果if我有1000對夫婦(關鍵,價值)?? – Imoum 2013-03-25 12:56:06

+0

如果我必須按照「value *」的順序對OrderedDict([('1','value1'),('2','value2')])'進行排序, – 2016-07-08 10:24:43

8
sorted(result.iteritems(), key=lambda key_value: key_value[0]) 

這將輸出排序結果,但字典將保持未排序。如果你想保持字典的順序,使用OrderedDict

其實,如果你排序你可以跳過key=...部分,因爲那時的迭代項目是按值(什麼NPE的使用首先由鍵後整理在他的回答中)

+0

我會親自去'鍵=拉姆達(KEY,VAL):VAL)'這也是正確的,但恕我直言也更明確 – 2013-03-25 11:48:29

+1

@JonClements在python 3已棄用,所以目前的做法更好 – jamylak 2013-03-25 11:50:09

+0

@jamylak:爲什麼不推薦?任何參考? – 2013-03-25 11:51:19