2010-12-02 21 views

答えて

17

dictは順不同です。だから、それらを直接ソートする方法はありませんが、あなたは(キー、値)タプルのリストに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

+0

リストオブジェクトは呼び出し可能ではないと言いますか? – user469652

+2

@A: 'dict.items()'は(key、value)の2タプルのリストを返します。 –

1

辞書は「ソート」されていません。それは意味のある概念ではありません。概念的には、キーと値は全く「順序付け」されていないので、それらの順序を変更することはできません。

+0

が、私たちは、私を変換することができます。それを反復処理の意図のための辞書は、あなたがこれを行うことができます他のシーケンスタイプに変換してソートして辞書に戻します。 – user469652

+4

@ user469652:どの時点でソートされなくなりますか。 –

4

python 2.7以降を使用している場合は、OrderedDictを使用してください。

通常の辞書と同じですが、項目が挿入された順序を覚えています。順序付けされたディクショナリを反復処理する場合、アイテムはキーが最初に追加された順序で返されます。見る、のpython 2.4またはより低いため、同じ効果の何かを達成しようとするために例から

>>> # 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)]) 

ドロップPy2.7の新しいコレクションに代わるものです.OrderedDictはPython 2.4で動作します-2.6。

+0

私はPython 2.6を使っています.... – user469652

+0

@ user469652:これをエミュレートするpypiまたはrecipeへのリンクを追加しました。これはPython 2.6で動作します – pyfunc

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')))