2012-08-01 16 views
14

ネストされた辞書の内部の値に基づいてPythonの辞書をソートするにはどうすればよいですか?例えばネストされた辞書の値に基づいてPythonの辞書を並べ替える

contextの値に基づいて、以下のソートmydict

mydict = { 
    'age': {'context': 2}, 
    'address': {'context': 4}, 
    'name': {'context': 1} 
} 

結果は次のようにする必要があります:あなたがどんなに骨を折ってやっ辞書を並べ替えることはできません

{ 
    'name': {'context': 1}, 
    'age': {'context': 2}, 
    'address': {'context': 4}  
} 
+1

リスト出力をしますか?または辞書の出力? – Deniz

答えて

15
>>> from collections import OrderedDict 
>>> mydict = { 
     'age': {'context': 2}, 
     'address': {'context': 4}, 
     'name': {'context': 1} 
} 
>>> OrderedDict(sorted(mydict.iteritems(), key=lambda x: x[1]['context'])) 
OrderedDict([('name', {'context': 1}), ('age', {'context': 2}), ('address', {'context': 4})]) 
5

それらは順序付けられていないコレクションであるためです。代わりにOrderedDictフォームcollectionsモジュールを使用してください。

+0

また、ラムダを使って各キーの値を調べることで、おそらくキーのぎこちないリストの理解ができます。そうすることの難しさは、なぜ「OrderedDict」を使うのかという大きな教訓です。 –

+0

更新:Python 3.6以降では、辞書の挿入順序が保持されるため、このステートメントはもはや真です。 – pelson

関連する問題