Python 辞書 ソート 要素をkeyやvalueでソートする方法!

Python 辞書 ソート 要素をkeyやvalueでソートする方法

今回は、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式を使えるようになると、関数の扱いが楽になります。

よかったらシェアしてください!
目次