Python

Python 辞書をソートする(並び替え)方法は?

Pythonで複数の要素をまとめて格納するときに、リストや辞書を使用すると思います。

要素をある条件でソートするには、sortやsortedを使いますが、辞書の場合は少し工夫が必要です。

目次

Python辞書のソート方法

下記のような辞書を作ります。

d = {'Osaka': 6, 'Tokyo': 3, 'Kanagawa': 4}

 

辞書型はそのままsortするとエラーになります。

d.sort()
print(d) # AttributeError: 'dict' object has no attribute 'sort'

 

sortedでソートすると、キーで並び替えられたリストになります。

sorted_d = sorted(d)
print(sorted_d) # ['Kanagawa', 'Osaka', 'Tokyo']

 

辞書をソートするには、そのままではなく一度items()でキーと値をすべて取り出します。

d2 = d.items()
print(d2)
# dict_items([('Osaka', 6), ('Tokyo', 3), ('Kanagawa', 4)])

 

(key, value)がタプルになった形で取り出すことができます。

型はdict_items型になります。リストに変換することができます。

この形で、sortedを使用すると中身が残ったまま、並び替えができます。

sorted_d2 = sorted(d.items())
print(sorted_d2)
# [('Kanagawa', 4), ('Osaka', 6), ('Tokyo', 3)]

 

lambdaを使って辞書を並び替える方法

辞書にあるkeyやvalueを使ってソートする方法として、lambdaがあります。

sortedの引数keyの部分に「lambda式」を入れてあげます。

公式ドキュメントのsortedの式はこちら。

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

 

keyにlambda式を入れたものです。

インデックスでkeyとvalueを分けます。

# keyで並び替える
sorted_d3 = sorted(d.items(), key=lambda x:x[0]) # インデックス0
print(sorted_d3)
# [('Kanagawa', 4), ('Osaka', 6), ('Tokyo', 3)]

 

# valueで並び替える
sorted_d3 = sorted(d.items(), key=lambda x:x) # インデックス1
print(sorted_d3)
# [('Tokyo', 3), ('Kanagawa', 4), ('Osaka', 6)]

 

sortedで並び替えた辞書はタプルのリストになっています。