Python

【Python】辞書の要素を並び替える方法

この記事では、Python で辞書の要素を並び替える方法を解説します。辞書には sort()メソッド が存在しないため sorted()関数 を使って並び替えます。

sorted(iterable, *, key=None, reverse=False)

keyでソートして、keyのみ格納されたリストを返す

sorted()関数 の引数に辞書を指定して実行してみる。

d = {'name': '田中太郎', 'age': 20, 'gender': '男'}

sorted_d = sorted(d)
print(sorted_d)

実行結果

['age', 'gender', 'name']

昇順で並び替えされた key がリストとして返されました。

keyでソートして(key, value)のリストとして返す

sorted()関数 の引数に辞書の items()メソッド を指定して実行する。

d = {'name': '田中太郎', 'age': 20, 'gender': '男'}

sorted_d = sorted(d.items())
print(sorted_d)

実行結果

[('age', 20), ('gender', '男'), ('name', '田中太郎')]

辞書ではなく (key, vlaue) を格納したリストとして返される。

valueでソートして(key, value)のリストとして返す

sorted()関数 の第一引数に辞書の items()メソッド を指定し、第二引数でラムダを使ってソートする条件を指定することで value でソートできる。

試しに value を基準に昇順で並び替えてみます。

d = {'four': 4, 'three': 3, 'one': 1}
sorted_d = sorted(d.items(), key=lambda v: v[1])

print(sorted_d)

実行結果

[('one', 1), ('three', 3), ('four', 4)]

返される値は 辞書ではなく (key, value) を格納したリストです。

応用: リスト内に格納された辞書のソート

リストに格納された辞書もソートすることができます。以下のコードでは scoreキー で並び替えしています。

scores = [
    {'name': '朝倉', 'score': 91},
    {'name': 'ジョン・スミス', 'score': 63},
    {'name': '谷口', 'score': 34},
]

sort_scores = sorted(scores, key=lambda v: v['score'])
print(sort_scores)

実行結果

[{'name': '谷口', 'score': 34}, {'name': 'ジョン・スミス', 'score': 63}, {'name': '朝倉', 'score': 91}]