今回は、Pythonの辞書の要素をソートする方法について解説していきます。
ソートとは

ソートとは
ソートとは、ある一定の条件に従って複数の要素を並べ替えることをいいます。
ソートは小さい要素から並べていく「昇順」と、大きい要素から並べていく「降順」があります。
Pythonでは複数の要素をまとめて扱うことができる「シーケンス」が用意されています。
シーケンスとは、コレクションのうち集約する要素が一定の順序で並んでいて、その順序を使い、その要素を指定できる種類のオブジェクトのことで、
Pythonでは4種類のシーケンスがあります。
4種類のシーケンス
- list(リスト)
- tuple(タプル)
- range(レンジ)
- string(文字列)
この4つのシーケンスのソートを行うメソッドとして、sortメソッドと、sortedメソッドがあります。
sortメソッド
sortメソッドを使用することで、元のリストをソートすることができます。
破壊的な処理のため、ソート前のリストは書き換えられます。
sortメソッドの書き方
リスト.sort( key=None, reverse=False )
sortedメソッド
sortedメソッドを使用することで、イテラブルオブジェクト(辞書、リスト、タプルなど)をソートすることができます。
非破壊的処理のため、ソート前のイテラブルオブジェクトを保持したまま、ソート後のリストを返します。
sortedメソッドの書き方
ソート後のリスト = sorted( イテラブルオブジェクト, key=None, reverse=False )
辞書の要素をソートする
辞書はkeyとvalueで構成されており、要素をソートすることができます。
dic = {“abc”: 1, “def”: 2, “ghi”: 3}
Pythonでは、辞書の要素をkeyやvalueでソートすることができます。
辞書のitemsメソッド
辞書のitemsメソッドを使うことで、辞書のkeyと値を同時に取得できます。
辞書のitemsメソッドの書き方
辞書.items()
サンプルコード

サンプルコード
(例1)keyによる昇順のソート
dic = {"X": 80, "A": 200, "E": 5, "R": 20, "S": 40}
dic2 = sorted(dic.items())
print(dic2)
# 実行結果:
[('A', 200), ('E', 5), ('R', 20), ('S', 40), ('X', 80)]
降順のソートを行う場合は、reverseオプションを使います。
(例2)keyによる降順のソート
dic = {"E": 90, "A": 100, "B": 10, "C": 20, "D": 40}
dic2 = sorted(dic.items(), reverse=True)
print(dic2)
# 実行結果:
[('E', 90), ('D', 40), ('C', 20), ('B', 10), ('A', 100)]
valueでソートする場合は、その場に関数定義を記述する方法である「ラムダ式」やユーザー定義関数を使用してソート条件を指定します。
(例3)valueによる昇順のソート
dic = {"E": 90, "A": 100, "B": 10, "C": 20, "D": 40}
dic2 = sorted(dic.items(), key=lambda e:e[1])
print(dic2)
# 実行結果:
[('B', 10), ('C', 20), ('D', 40), ('E', 90), ('A', 100)]
降順にソートする場合は、reverseオプションを使います。
(例4)valueによる降順のソート
dic = {"E": 90, "A": 100, "B": 10, "C": 20, "D": 40}
dic2 = sorted(dic.items(), key=lambda x:x[1], reverse=True)
print(dic2)
# 実行結果:
[('A', 100), ('E', 90), ('D', 40), ('C', 20), ('B', 10)]
lambda(ラムダ式)を使う

lambda(ラムダ式)を使う
lambda(ラムダ式)とは
lambda(ラムダ式)とは、無名関数のことをいいます。
通常、Pythonで関数を定義する場合は、def文を用いて、関数に名前を付けて定義しますが、lambda(ラムダ式)を使うことで、名前を付けずに関数を作ることができます。
lambda式の書き方
def文を使って関数を定義する場合は、
def 関数名( 引数 ) :
return 返り値
となりますが、
lambda式では、
lambda 引数 : 返り値
となります。
lambda式の特徴としては、def文と同じ処理をしても、lambda式を使った記述の方が、簡潔なコード表記にすることができます。
辞書を値でソートする
lambda式を使って辞書を値でソートします。
(例)lambda式で関数を定義する
eq = lambda a : a*a
print(eq(3))
# 実行結果: 9
lambda式で、関数に定義した、3が渡され、2回掛け算されて、9が返されます。
このように、lambda式を使えるようになると、関数の扱いが楽になります。