文法・環境 組み込み関数 辞書

【python】辞書(dict)のソート方法【sorted関数、降順、lambda、文字列】

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を扱ううえで基本となる内容なので覚えておくようにしましょう。

スポンサーリンク

-文法・環境, 組み込み関数, 辞書
-, ,