Python で辞書をキーで並べ替える方法

Azaz Farooq 2023年10月10日
  1. Python で辞書をキーでソートする dict.keys() メソッド
  2. Python の dict.items() メソッドで辞書をキーでソートする
  3. Python の OrderedDict() メソッドで辞書をキーでソートする
  4. Python で辞書を逆順に並べ替える
  5. カスタム key 関数メソッドを用いた Python の辞書のソート
Python で辞書をキーで並べ替える方法

Python の辞書は、キーのハッシュを評価してエントリを保持するハッシュテーブルと同じで、エントリの並びが予想できません。この記事では、Python で辞書をキーでソートする方法を紹介します。

Python で辞書をキーでソートする dict.keys() メソッド

以下の辞書を例にしてみよう。

dict = {"hello": 56, "at": 23, "test": 43, "this": 43}

dict.keys() の出力は

dict_keys(["hello", "at", "test", "this"])

この順序のないキーのリストから、新しい順序付きの辞書を作ることができます。

sorted(dict.keys())

出力:

['at', 'hello', 'test', 'this']

辞書から各エントリを選択することで、この順序付きリストにソートを繰り返し適用します。

for key in sorted(dict.keys()):
    print(key, " :: ", dict[key])

出力:

at  ::  23
hello  ::  56
test  ::  43
this  ::  43

Python の dict.items() メソッドで辞書をキーでソートする

Python の dict.items() メソッドを使って辞書をキーでソートすることもできます。

これはキーと値のペアを保持するリストを生成します。

dict.items()

出力:

dict_items([('hello', 56), ('at', 23), ('test', 43), ('this', 43)])

以下の関数で整理リストを作成することができます。辞書のエントリをキーの値に応じてソートしてくれる。

sorted(dict.keys())

出力:

['at', 'hello', 'test', 'this']

さて、辞書からソートされたキーと値のペアを生成するには、次のコードを使用します。

for elem in sorted(dict.items()):
    print(elem[0], " ::", elem[1])

出力:

at  :: 23
hello  :: 56
test  :: 43
this  :: 43

複雑さの点では、前のアプローチよりも強力です。dict.key() のように、反復可能なリストをソートした後にキー値をチェックする必要がないからです。

Python の OrderedDict() メソッドで辞書をキーでソートする

あるいは、collections モジュールを使って辞書の項目をキー値でソートすることもできます。

import collections

d = {2: 13, 1: 9, 4: 25, 3: 0}
result = collections.OrderedDict(sorted(d.items()))
print(result)

出力:

OrderedDict([(1, 9), (2, 13), (3, 0), (4, 25)])

Python で辞書を逆順に並べ替える

前回までは、辞書の項目を昇順に並べ替えました。今回は、辞書の項目を降順に並べ替える方法について説明します。

構文は以下の通りです。

sorted(iterable_sequence, reverse=True)

以下のコードは、辞書の項目をソートして反転させる。

dict = {"hello": 56, "at": 23, "test": 43, "this": 43}
for elem in sorted(dict.items(), reverse=True):
    print(elem[0], " ::", elem[1])

パラメータ reverse=true は、ソートされた辞書が反転されることを確認します。

出力:

this  :: 43

test  :: 43

hello  :: 56

at  :: 23

カスタム key 関数メソッドを用いた Python の辞書のソート

このメソッドは key の文字列の長さを用いて辞書の項目をソートします。

sorted(iterable_sequence, key=Function)

パラメータ key には文字列のサイズを返す関数 lambda が与えられます。

listofTuples = sorted(dict.items() ,  key=lambda x: len (x[0] ) )
for elem in listofTuples :
    print(elem[0] , " ::" , elem[1] )

出力:

at  :: 23

test  :: 43

this  :: 43

hello  :: 56

関連記事 - Python Dictionary