Pythonで辞書(dict)を値で並べ替える方法【OrderedDictとsorted()活用】
Pythonで辞書を値順にソートする基本の考え方
Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書型のサブクラスで、要素が追加された順序を記憶できるのが特徴です。通常の dict もPython 3.7以降は挿入順を保持しますが、明示的に順序を扱いたい場面では OrderedDict が便利です。
OrderedDict をイテレートすると、キーが最初に追加された順序どおりにアイテムが返されます。
OrderedDictの基本的な使い方
>>> from collections import OrderedDict
>>> D = {5:'fff', 3:'ttt', 1:'ooo', 4:'bbb', 2:'ddd'}
>>> OrderedDict(D.items())
OrderedDict([(5, 'fff'), (3, 'ttt'), (1, 'ooo'), (4, 'bbb'), (2, 'ddd')])
sorted()関数とkey引数で値を基準に並べ替える
次に、反復可能オブジェクトの要素を指定した順序で並べ替える組み込み関数 sorted() を使います。この関数は、ソートの基準となる値を返す関数を key 引数として受け取れます。
辞書を「値」でソートしたい場合は、D.items() が返すタプル(キー, 値)のうち、2番目の要素(インデックス1)を基準にすればよいので、ラムダ式で t[1] を指定します。
>>> OrderedDict(sorted(D.items(), key=lambda t: t[1])) OrderedDict([(4, 'bbb'), (2, 'ddd'), (5, 'fff'), (1, 'ooo'), (3, 'ttt')])
これで、値のアルファベット順('bbb' → 'ddd' → 'fff' → 'ooo' → 'ttt')に並べ替えられた OrderedDict が得られます。降順にしたい場合は reverse=True を追加してください。
結果を通常のdictに戻す方法
OrderedDict オブジェクトは、dict() コンストラクタに渡すことで、通常の辞書オブジェクトへ変換できます。
>>> D1 = dict(OrderedDict(sorted(D.items(), key=lambda t: t[1])))
>>> D1
{4: 'bbb', 2: 'ddd', 5: 'fff', 1: 'ooo', 3: 'ttt'}
補足:よりシンプルな書き方
Python 3.7以降では通常の dict も挿入順を保持するため、OrderedDict を介さずに次のように書くこともできます。
>>> D1 = dict(sorted(D.items(), key=lambda t: t[1]))
>>> D1
{4: 'bbb', 2: 'ddd', 5: 'fff', 1: 'ooo', 3: 'ttt'}
また、operator.itemgetter(1) を key に使うと、ラムダ式よりもわかりやすく、わずかに高速です。
>>> from operator import itemgetter
>>> dict(sorted(D.items(), key=itemgetter(1)))
{4: 'bbb', 2: 'ddd', 5: 'fff', 1: 'ooo', 3: 'ttt'}
このように、sorted() の key 引数を工夫することで、辞書をキーだけでなく値の基準でも自由に並べ替えられます。データ処理や集計結果の表示など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。
-
Pythonで辞書をキー順に並べ替える方法【OrderedDictとsorted()の使い方】
Pythonで辞書(dict)の要素をキーの順序に従って並べ替えたい場面はよくあります。この記事では、標準ライブラリのcollectionsモジュールに含まれるOrderedDictと、組み込み関数sorted()を組み合わせて、辞書をキー順にソートする方法を解説します。 OrderedDictとは Pythonの標準ディストリビューションには、高性能なコンテナデータ型を定義したcollectionsモジュールが含まれています。その中のOrderedDictは、辞書のサブクラスであり、要素が追加された順序を記憶する特徴を持っています。OrderedDictをイテレートすると、キーが最初に追加さ
-
Pythonで辞書のすべての値を取得・出力する方法
Pythonの辞書(dict)オブジェクトには、すべての値を簡単に取得できるvalues()メソッドが標準で用意されています。このメソッドを呼び出すと、辞書に格納された全ての値が dict_values オブジェクトとして返されます。values()メソッドを使う基本的な方法以下の例では、辞書 D1 のすべての値を values() メソッドで取得しています。戻り値はビューオブジェクトのため、リストとして扱いたい場合は list() 関数で変換すると便利です。>>> D1 = {1:a, 2:b, 3:c} >>> D1.values() dict_valu