2017-04-07 10 views
2

私は初心者コーディングです。私はダブル辞書を並べ替えるのに苦労しています。たとえば、値でダブル辞書を並べ替える方法(Python3)

dict = { 
'student_A': { 
    'name': 'Hiro', 
    'age': 22, 
}, 
'student_B': { 
    'name': 'Alex', 
    'age': 24, 
    }, 
'student_C': { 
    'name': 'Jon', 
    'age': 23, 
    } 
} 

このコードでは、このような年齢順にどのように並べることができますか? :

[ 
{ 
    'name': 'Alex' 
}, 
{ 
    'name': 'Jon' 
}, 
{ 
    'name': 'Hiro' 
} 
] 

詳細を説明できると大変感謝しています。

+5

'リスト(ソート(dict.values()、キー=ラムダX:X [ '年齢']))'。ただし、変数に組み込み関数と同じ名前を付けないでください。これは組み込み関数をマスクします。 – zondo

+0

@zondoオイ、ビジョン誤った脳、通知のために感謝します。 –

+0

おそらく、苦労している理由は、結果を辞書に戻そうとしていることでしょうか?辞書は定義でソートすることはできません。実際にリストを探しているのであれば、あなたの構文が示唆するように、あなたは大丈夫でしょう。 –

答えて

1

あなたはこのようにそれを行うことができます。

value_list = list(dict.values()) 
value_list.sort(key=lambda value: value['age']) 

このvalue_list年齢によってソートされた辞書、の値のリストを作成します。これはdict.values()を呼び出してdict_valuesオブジェクトを取得することで行います。このオブジェクトはリストに変換され、次にlist.sort()メソッドを呼び出すことでソートできます。 keyパラメータは、各辞書の年齢を返す関数です。

lambda name: statementの構文が見当たらない場合は、hereという参照があります。

+0

あなたの優しい答えをありがとう!私はあなたの講義の後に辞書からリストを作ることができましたが、それは変更された順序ではありませんでした。 – user7421972

1

年齢の逆順で実際に名前を付けたいと思うように見えますか?また、リストされているオブジェクトに名前だけが必要なので、元のオブジェクトの年齢部分を除外します。

この場合、おそらく、リストのフィルタリングとマップ型操作を行うために非常に便利で無計画な方法であるリストの理解を使用したいと思うでしょう。リストの理解の詳細については、公式documentationをご確認ください。

これを行う方法の例:

>>> my_ordered_list = [ {'name': student['name']} for student in sorted(dict.values(), key=lambda x:-x['age']) ] 

>>> my_ordered_list 
[{'name': 'Alex'}, {'name': 'Jon'}, {'name': 'Hiro'}] 
+0

お返事ありがとうございました。私は理解してそれを作るようにしようとします。 – user7421972

関連する問題