2010-12-02 278 views

回答

17

dict s是無序的。所以沒有辦法對他們直接進行排序,但如果你願意 向dict轉換成的(鍵,值)元組的列表,那麼你可以這樣做:

In [9]: d 
Out[9]: {'a': {'b': 'whatever', 'k': 1}, 'b': {'b': 'sort by k', 'k': 2}} 

In [15]: sorted(d.items(),key=lambda x: x[1]['k'],reverse=True) 
Out[15]: [('b', {'b': 'sort by k', 'k': 2}), ('a', {'b': 'whatever', 'k': 1})] 

excellent mini-howto解釋瞭如何使用的key參數。

+2

你能解釋一下`x [1] ['k']`嗎?我理解['k']部分,但是x [1]是什麼? – user225312 2010-12-02 05:20:06

1

詞典不是「排序」的。這不是一個有意義的概念。在概念上,鍵和值根本不在任何「順序」中,因此您無法更改它們的順序。

+0

是的,但我們可以把我t轉換爲其他序列類型並對其進行排序並將其再次轉換爲字典。 – user469652 2010-12-02 05:20:25

+4

@ user469652:在哪一點他們將不再被排序。 – 2010-12-02 05:22:25

4

如果您使用python 2.7或更高版本,請使用OrderedDict

有序字典就像普通字典一樣,但是他們記得物品被插入的順序。在迭代有序字典時,將按照首次添加密鑰的順序返回項目。

從例如

>>> # regular unsorted dictionary 
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2} 

>>> # dictionary sorted by key 
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0])) 
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) 

對於試圖達到同樣的效果爲Python 2.4或更低一些,請參閱:

一掇代替Py2.7的新collections.OrderedDict,它可以在Python 2.4中工作-2.6。

0

如果你有一本字典(數據)包含的值(V)和優先級(P),如果你想進行排序的子詞典(D1和D2)字典用於遍歷它那麼的意圖,那麼你可以這樣做:

data = { "d1": { "v": "hello", "p": 3}, "d2": {"v": "hi again", "p": 1},} 

for item in sorted(data.keys(), key=lambda x: data[x]['p']): 
    print item 
0
from collections import OrderedDict 
from operator import * 

d = { 'a':{'k':1, 'b':'whatever'}, 'b':{'k':2, 'b':'sort by k'} } 
sorted_d = OrderedDict(sorted(d.items(), key=lambda x: getitem(x[1], 'k')))