pythonで、辞書の要素をソートする方法について、紹介します。
辞書の要素をキー・値でソートする方法、降順でソートする方法など、辞書のソートに関する様々な内容について、紹介しています。
この記事で分かること
- 辞書のソートの基本【sorted関数、itemsメソッド】
- 辞書をキー(key)でソートする方法
- 辞書を値(value)でソートする方法
- 辞書をlambdaを用いてソートする方法
- 辞書を降順でソートする方法
- 辞書を、キーや値の文字列の長さでソートする方法
- 辞書をソートし、辞書のままにする方法
スポンサーリンク
pythonの辞書のソートの基本【sorted関数、itemsメソッド】
はじめに、辞書のソートでよく使用される、
sorted関数と、辞書のitemsメソッドについて、紹介します。
sorted関数について
sorted関数を用いることで、イテラブルオブジェクト(辞書、リスト、タプルなど)をソートできます。
非破壊的処理であるため、ソート前のイテラブルオブジェクトを保持したまま、ソート後のリストを返します。
記述方法は以下のとおりです。
オプションとして、ソート方法を記述するkey、降順のソートに切り替えるreverseを指定できます。こちらについては、省略も可能です。
sorted関数
ソート後のリスト = sorted( イテラブルオブジェクト, key=None, reverse=False )
以下、sorted関数で、リストをソートするサンプルコードです。
### sorted関数の使用例:リストのソート
num_list = [41, 52, 15, 38, 22]
new_num_list = sorted(num_list)
print(num_list)
# [41, 52, 15, 38, 22]
print(new_num_list)
# [15, 22, 38, 41, 52]
なお、リストのソートについては下記記事で紹介しています。
辞書のitemsメソッドについて
辞書のitemsメソッドを用いることで、辞書のキーと値を同時に取得できます。
これを利用して、辞書のキーと値をソートします。
辞書のitemsメソッドの記述方法は以下のとおりです。
辞書のitemsメソッド
辞書.items()
以下、itemsメソッドで、辞書のキーと値を同時に取得するサンプルコードです。
### 辞書のitemsメソッドでキーと値を同時に取得
fruits_dict1 = {'Banana':200, 'Orange':100, 'Apple':100, 'Grape':500}
print(fruits_dict1)
# {'Banana': 200, 'Orange': 100, 'Apple': 100, 'Grape': 500}
print(type(fruits_dict1.items()))
# <class 'dict_items'>
print(fruits_dict1.items())
# dict_items([('Banana', 200), ('Orange', 100), ('Apple', 100), ('Grape', 500)])
> print(type(fruits_dict1.items()))
> # <class 'dict_items'>
itemsメソッドの返り値は、" dict_itemsオブジェクト "になっています。
> print(fruits_dict1.items())
> # dict_items([('Banana', 200), ('Orange', 100), ('Apple', 100), ('Grape', 500)])
dict_itemsオブジェクトでは、タプルとリストの組合せで、要素が格納されています。
辞書のitemsメソッドについては、下記記事で紹介しています。
スポンサーリンク
辞書をキー(key)でソート
辞書をキーでソートする方法について紹介します。
itemsメソッドで取得したキーと値を、sorted関数の引数に渡すことで、
辞書を、キーでソートすることができます。
以下、辞書の要素をキーでソートするサンプルコードです。
キーが文字列になっているため、アルファベット順にソートしています。
### 辞書の要素をキーでソート
fruits_dict1 = {'Banana':200, 'Orange':100, 'Apple':100, 'Grape':500}
print(fruits_dict1)
# {'Banana': 200, 'Orange': 100, 'Apple': 100, 'Grape': 500}
fruits_list1 = sorted(fruits_dict1.items())
print(type(fruits_list1))
# <class 'list'>
print(fruits_list1)
# [('Apple', 100), ('Banana', 200), ('Grape', 500), ('Orange', 100)]
> fruits_list1 = sorted(fruits_dict1.items())
itemsメソッドで取得したキーと値を、sorted関数の引数に渡しています。
sorted関数の返り値は、リストになります。
> print(fruits_list1)
> # [('Apple', 100), ('Banana', 200), ('Grape', 500), ('Orange', 100)]
キーがアルファベット順でソートされています。
辞書を値(value)でソート【lambdaを利用】
次に、辞書を値でソートする方法について紹介します。
値でソートする場合は、lambda式を使うと便利なので、はじめにlambda式について説明します。
lambda式(無名関数)について
lambda(無名関数)を用いると、その名のとおり、"名前" をつけずに関数を作成することができます。
lambdaを用いて、関数は下記のように定義できます。
lambdaの書き方
lambda 引数 : 返り値
以下、lambda式のサンプルコードです。
### lambdaで関数を定義
eq = lambda x : x*x
print(eq(2))
# 4
> eq = lambda x : x*x
lambda式で、引数xを2回掛け算する関数 x*x を定義しています。
> print(eq(2))
> # 4
定義した関数に" 2 "が渡され、定義した関数で2回掛け算され4が返されています。
lambda式(無名関数)については、下記記事で詳しく紹介しています。
辞書を値でソートする方法
sorted関数のkeyに、辞書の値を渡すことで、辞書の値に基づいて要素をソートできます。
ここでいうkeyは、辞書のキーとは別なので注意してください。
以下、辞書の値でソートするサンプルコードです。
### 辞書の要素を値でソート
fruits_dict1 = {'Banana':200, 'Orange':100, 'Apple':100, 'Grape':500}
print(fruits_dict1)
# {'Banana': 200, 'Orange': 100, 'Apple': 100, 'Grape': 500}
fruits_list1 = sorted(fruits_dict1.items(), key = lambda fruit : fruit[1])
print(type(fruits_list1))
# <class 'list'>
print(fruits_list1)
# [('Orange', 100), ('Apple', 100), ('Banana', 200), ('Grape', 500)]
> fruits_list1 = sorted(fruits_dict1.items(), key = lambda fruit : fruit[1])
" key = lambda fruit : fruit[1] " の部分で、lambda式を用いて、引数fruitから値に対応した要素fruit[1]を取得し、keyに渡しています。
> print(fruits_list1)
> # [('Orange', 100), ('Apple', 100), ('Banana', 200), ('Grape', 500)]
値について、昇順でソートされています。
スポンサーリンク
辞書を降順でソート
次に、辞書を降順でソートする方法について、紹介します。
sorted関数の引数reverseにTrueを渡すことで、降順でソートできます。
以下、辞書の値について降順でソートするサンプルコードになります。
### 辞書を降順でソート
fruits_dict1 = {'Banana':200, 'Orange':100, 'Apple':100, 'Grape':500}
print(fruits_dict1)
# {'Banana': 200, 'Orange': 100, 'Apple': 100, 'Grape': 500}
fruits_list1 = sorted(fruits_dict1.items(), key = lambda fruit : fruit[1], reverse=True)
print(fruits_list1)
# [('Grape', 500), ('Banana', 200), ('Orange', 100), ('Apple', 100)]
辞書を、キーや値の文字列の長さでソート
辞書を、キーや値の文字列の長さでソートする例を紹介します。
以下、辞書をキーの文字列の長さでソートするサンプルコードです。
### 辞書をキーの文字列の長さでソートする
fruits_dict1 = {'Banana':200, 'Orange':100, 'Apple':100, 'Grape':500}
print(fruits_dict1)
# {'Banana': 200, 'Orange': 100, 'Apple': 100, 'Grape': 500}
fruits_list1 = sorted(fruits_dict1.items(), key = lambda fruit : len(fruit[0]))
print(fruits_list1)
# [('Apple', 100), ('Grape', 500), ('Banana', 200), ('Orange', 100)]
> fruits_list1 = sorted(fruits_dict1.items(), key = lambda fruit : len(fruit[0]))
" key = lambda fruit : len(fruit[0]) " の部分で、lambda式を用いて、引数fruitからキーに対応した要素fruit[0]を取得し、len関数で文字列の長さを算出したうえでkeyに渡しています。
辞書をソートし、辞書のままにする
辞書をソートし、辞書の状態で結果を取得する方法を紹介します。
sorted関数の返り値のリストを、dict関数に渡すことで、ソート結果を再度辞書に戻すことができます。
以下、ソート結果を辞書で取得するサンプルコードです。
### 辞書をソートし、辞書のままにする
fruits_dict1 = {'Banana':200, 'Orange':100, 'Apple':100, 'Grape':500}
print(fruits_dict1)
# {'Banana': 200, 'Orange': 100, 'Apple': 100, 'Grape': 500}
fruits_dict2 = dict(sorted(fruits_dict1.items()))
print(type(fruits_dict2))
# <class 'dict'>
print(fruits_dict2)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}
スポンサーリンク
まとめ
pythonで、辞書の要素をソートする方法について、紹介しました。
イテラブルオブジェクト(辞書、リスト、タプルなど)のソート方法は、pythonを扱ううえで基本となる内容なので覚えておくようにしましょう。
スポンサーリンク