schedule2019-04-08

要素が辞書型dictの配列をソートする | Python

配列の要素が辞書型の場合のソートの仕方をまとめました。 lambdaを使うと任意のkeyでソートできます。 書き方もシンプルです。

業務では、API連携で受け取ったデータを処理するときに使っています。

2次元配列のソートはこちらで解説しています。2次元配列をソートした結果(昇順・降順・逆順) | Python

動作確認:Python 3.7

ソートする配列

本題の前にソートする配列の一例をお見せします。

arr = [{'name': 'takahashi', 'age': 32}, {'name': 'kikuchi', 'age': 43}, {'name': 'watanabe', 'age': 22}]

このように、文字列と数値を持ったdictを要素に持つ配列です。

arr = [
    {'name': 'takahashi', 'age': 32},
    {'name': 'kikuchi', 'age': 43},
    {'name': 'watanabe', 'age': 22}
]

要素がdict型の配列をソート sorted()

lambdaを使うとdict型も任意のkeyでソートできる。

arr = [
    {'name': 'takahashi', 'age': '32'},
    {'name': 'kikuchi', 'age': '43'},
    {'name': 'watanabe', 'age': '22'}]

# ageで昇順
print(sorted(arr, key=lambda x: x['age']))
"""
[{'name': 'watanabe', 'age': '22'}, {'name': 'takahashi', 'age': '32'}, {'name': 'kikuchi', 'age': '43'}]
"""

# nameで昇順
print(sorted(arr, key=lambda x: x['name']))
"""
[{'name': 'kikuchi', 'age': '43'}, {'name': 'takahashi', 'age': '32'}, {'name': 'watanabe', 'age': '22'}]
"""

sorted()の引数keyにdictのkeyを参照させます。 やり方はkey=lambda x: x['age']とする。

sort()

sort()も同様です。

# ageで昇順
arr.sort(key=lambda x: x['age'])
print(arr)
"""
[{'name': 'watanabe', 'age': '22'}, {'name': 'takahashi', 'age': '32'}, {'name': 'kikuchi', 'age': '43'}]
"""

降順

reverse=Trueで降順になります。

# ageで降順
arr.sort(key=lambda x: x['age'], reverse=True)
print(arr)
"""
[{'name': 'watanabe', 'age': '22'}, {'name': 'takahashi', 'age': '32'}, {'name': 'kikuchi', 'age': '43'}]
"""

あわせてどうぞ

2次元配列のソートの実行結果をまとめました。

2次元配列をソートした結果(昇順・降順・逆順) | Python

コピペで実行できるよう、Pythonの書き方をまとめてあります。