Pythonで辞書をキー順に並べ替える方法【OrderedDictとsorted()の使い方】
Pythonで辞書(dict)の要素をキーの順序に従って並べ替えたい場面はよくあります。この記事では、標準ライブラリのcollectionsモジュールに含まれるOrderedDictと、組み込み関数sorted()を組み合わせて、辞書をキー順にソートする方法を解説します。
OrderedDictとは
Pythonの標準ディストリビューションには、高性能なコンテナデータ型を定義したcollectionsモジュールが含まれています。その中の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')])
上記の例では、元の辞書の項目がそのままの順序でOrderedDictに格納されていることがわかります。
sorted()関数と組み合わせてキー順にソートする
次に、反復可能なオブジェクトの要素を指定した順序で並べ替えるsorted()関数を使用します。この関数は、ソートの基準となる値を返す関数を引数として受け取ります。辞書をキーで並べ替えたい場合は、各項目(タプル)の0番目の要素、つまりキー自体をソートキーとして指定します。
>>> D = {5:'fff', 3:'ttt', 1:'ooo', 4:'bbb', 2:'ddd'}
>>> OrderedDict(sorted(D.items(), key=lambda t: t[0]))
OrderedDict([(1, 'ooo'), (2, 'ddd'), (3, 'ttt'), (4, 'bbb'), (5, 'fff')])
key=lambda t: t[0]により、各タプルの先頭要素(キー)を基準に昇順でソートされ、結果としてキーが1から5の順に整列されたOrderedDictが得られます。
OrderedDictを通常の辞書に変換する
ソート済みのOrderedDictオブジェクトは、必要に応じて通常のdictオブジェクトに変換できます。
>>> D1 = dict(OrderedDict(sorted(D.items(), key=lambda t: t[0])))
>>> D1
{1: 'ooo', 2: 'ddd', 3: 'ttt', 4: 'bbb', 5: 'fff'}
補足:Python 3.7以降の場合
なお、Python 3.7以降では通常の辞書も挿入順序を保持することが仕様として保証されています。そのため、単純にキー順に並べ替えた辞書が必要なだけであれば、次のようにsorted()の結果を直接dict()に渡すだけでも十分です。
>>> D1 = dict(sorted(D.items()))
>>> D1
{1: 'ooo', 2: 'ddd', 3: 'ttt', 4: 'bbb', 5: 'fff'}
ただし、順序の維持が明示的に重要である場合や、古いバージョンのPythonとの互換性が必要な場合には、OrderedDictを使用する方法が有効です。
-
Pythonで辞書(dict)を値で並べ替える方法【OrderedDictとsorted()活用】
Pythonで辞書を値順にソートする基本の考え方 Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書型のサブクラスで、要素が追加された順序を記憶できるのが特徴です。通常の dict もPython 3.7以降は挿入順を保持しますが、明示的に順序を扱いたい場面では OrderedDict が便利です。 OrderedDict をイテレートすると、キーが最初に追加された順序どおりにアイテムが返されます。 OrderedDictの基本的な使い方 >>> from coll
-
Pythonで辞書(dict)のすべてのキーを取得・表示する方法
Pythonでは、辞書(dict)オブジェクトが持つ keys() メソッドを使うことで、すべてのキーを簡単に取得できます。このメソッドは辞書内の全キーを含むビューオブジェクト(dict_keys)を返します。 keys() メソッドでキーを取得する まずは基本的な使い方を見てみましょう。次の例では、3つのキーと値を持つ辞書から、すべてのキーを取り出しています。 >>> D1 = {1:a, 2:b, 3:c} >>> D1.keys() dict_keys([1, 2, 3]) >>> list(D1.keys()) [1, 2, 3]