LoginSignup
279
214

More than 3 years have passed since last update.

Pythonの辞書のリストを並び替える

Last updated at Posted at 2018-06-06

リストの並び替えはsortsortedでサクッと書けるが、辞書のリストの並び替えをすぐ忘れてしまうのでメモ。lambdaを使うのはわかっているのだが、なかなか記憶に定着しないので書いてみる。
2021/01/05追記
Python3.8.5で動作したことを確認したとともに、printの記述をPython3系の書き方に修正しました。

まずは基本のsortとsorted

sort()は破壊的。

降順にしたいときはsort(reverse=True)

nums = [3, 1, 9, 6]

nums.sort()
print(nums) # [1, 3, 6, 9]

nums.sort(reverse=True)
print(nums) # [9, 6, 3, 1]

sorted()は非破壊的。

降順にしたいときはsorted(hoge_list, reverse=True)

nums_1 = [3, 1, 9, 6]

nums_2 = sorted(nums_1)
print(nums_1) # [3, 1, 9, 6]
print(nums_2) # [1, 3, 6, 9]

nums_3 = sorted(nums_1, reverse=True)
print(nums_3) # [9, 6, 3, 1]

辞書の並び替えはlambdaを使う

items()を使うのでタプルになる。sort()は使えない。

keyで並び替えたいとき

score = {'kokugo': 33, 'sansuu': 85, 'eigo': 60}

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

score_sorted = sorted(score.items(), key=lambda x:x[0])

print(score_sorted) # [('eigo', 60), ('kokugo', 33), ('sansuu', 85)]

valueで並び替えたいとき

score = {'kokugo': 33, 'sansuu': 85, 'eigo': 60}

score_sorted = sorted(score.items(), key=lambda x:x[1])

print(score_sorted) # [('kokugo', 33), ('eigo', 60), ('sansuu', 85)]

ここから本題。辞書のリスト

lambdaのreturn部分のindex指定を、ソートしたいkeyにするだけ。

scores = [
    {'kokugo': 33, 'sansuu': 85},
    {'kokugo': 77, 'sansuu': 23},
    {'kokugo': 55, 'sansuu': 100}
]

scores_sorted = sorted(scores, key=lambda x:x['kokugo'])

print(scores_sorted)
# [
#     {'kokugo': 33, 'sansuu': 85},
#     {'kokugo': 55, 'sansuu': 100},
#     {'kokugo': 77, 'sansuu': 23}
# ]

参考

Python Tips:dict(辞書)型の中身をソートしたい
Pythonのリストを辞書型のvalue値でソートする方法メモ

279
214
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
279
214