Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでネストされた辞書を並べ替える方法|sorted関数とlambdaの使い方

ネストされたPython辞書の並べ替えとは?

Pythonでは、辞書(dict)の中にさらに辞書が格納されている「ネストされた辞書」を扱う場面がよくあります。例えば、次のような形式のデータがあったとします。

{
    'KEY1':{'name':'foo','data':1351,'completed':100},
    'KEY2':{'name':'bar','data':1541,'completed':12},
    'KEY3':{'name':'baz','data':58413,'completed':18}
}

このデータを、各エントリ内の「completed」キーの値を基準に昇順(小さい順)で並べ替えたい場合、組み込み関数 sorted() とラムダ式(lambda)を組み合わせることで簡単に実現できます。

sorted関数とlambdaを使った基本的な並べ替え

sorted() 関数の key 引数にラムダ式を渡すことで、「どの値を基準に並べ替えるか」を自由に指定できます。具体的なコードは以下の通りです。

my_collection = {
    'KEY1':{'name':'foo','data':1351,'completed':100},
    'KEY2':{'name':'bar','data':1541,'completed':12},
    'KEY3':{'name':'baz','data':58413,'completed':18}
}
sorted_keys = sorted(my_collection, key=lambda x: (my_collection[x]['completed']))
print(sorted_keys)

このコードを実行すると、completed の値が小さい順にキーが並べ替えられ、次のような出力が得られます。

['KEY2', 'KEY3', 'KEY1']

コードの仕組みを解説

この一行で行われている処理を分解して見てみましょう。

  • sorted(my_collection, ...):辞書をそのまま sorted() に渡すと、デフォルトでは辞書のキー('KEY1'、'KEY2'、'KEY3')が順番に取り出されます。
  • key=lambda x: my_collection[x]['completed']:各キー x に対して、対応するネストされた辞書から 'completed' の値を取り出し、それをソートの基準値としています。
  • その結果、completed の値が 12 → 18 → 100 の順になるよう、['KEY2', 'KEY3', 'KEY1'] というリストが返されます。

降順で並べ替えたい場合

逆に大きい順(降順)で並べ替えたいときは、reverse=True を指定するだけでOKです。

sorted_keys = sorted(my_collection, key=lambda x: my_collection[x]['completed'], reverse=True)
print(sorted_keys)  # ['KEY1', 'KEY3', 'KEY2']

items()メソッドを活用する応用テクニック

辞書の items() メソッドを使うと、キーと値のペアごと並べ替えて、後続の処理で値も一緒に扱いやすくなります。

sorted_items = sorted(my_collection.items(), key=lambda item: item[1]['completed'])
for key, value in sorted_items:
    print(key, value)

この方法なら、並べ替えた順序で各エントリの詳細情報(name や data など)にも簡単にアクセスできるため、実務でのデータ処理にも役立ちます。

まとめ

ネストされた辞書の並べ替えは、sorted() 関数の key 引数にラムダ式を渡すのが基本です。昇順はそのまま、降順は reverse=True、値ごと処理したい場合は items() を活用すると、柔軟かつ読みやすいコードが書けます。

  1. Pythonで辞書(dict)を値で並べ替える方法【OrderedDictとsorted()活用】

    Pythonで辞書を値順にソートする基本の考え方 Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書型のサブクラスで、要素が追加された順序を記憶できるのが特徴です。通常の dict もPython 3.7以降は挿入順を保持しますが、明示的に順序を扱いたい場面では OrderedDict が便利です。 OrderedDict をイテレートすると、キーが最初に追加された順序どおりにアイテムが返されます。 OrderedDictの基本的な使い方 >>> from coll

  2. Pythonで辞書をキー順に並べ替える方法【OrderedDictとsorted()の使い方】

    Pythonで辞書(dict)の要素をキーの順序に従って並べ替えたい場面はよくあります。この記事では、標準ライブラリのcollectionsモジュールに含まれるOrderedDictと、組み込み関数sorted()を組み合わせて、辞書をキー順にソートする方法を解説します。 OrderedDictとは Pythonの標準ディストリビューションには、高性能なコンテナデータ型を定義したcollectionsモジュールが含まれています。その中のOrderedDictは、辞書のサブクラスであり、要素が追加された順序を記憶する特徴を持っています。OrderedDictをイテレートすると、キーが最初に追加さ