【Python】リストと辞書をソートする

はじめに

Pythonでのソートに関して、リストのソートや辞書のソートの書き方をまとめました。

sortとsoted

sortはlist型のメソッドになります。元のリストがソートされます。

sortedはソートしたリストを生成します。list型だけでなく、辞書型もソートできます。

これから紹介する例はsortsotedで紹介します。

リストのソート

まずは1次元リストのソートです。

ソートするのは下記のリストです。

li = [3, 1, 8, 4, 9, 2, 7, 6, 5]

昇順にソートします。

li.sort()

sorted_li = sorted(li)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

降順にソートします。

li.sort(reverse=True)

sorted_li = sorted(li, reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1]

多次元リストのソート

次に多次元リストのソートです。

ソートするのは下記のリストです。

li = [[2, 7], [7, 8], [1, 3], [7, 2], [9, 1], [2, 4], [5, 8]]

そのままソートすると1つ目の要素でソートされます。

li.sort()

soted_li = sorted(li)
[[1, 3], [2, 4], [2, 7], [5, 8], [7, 2], [7, 8], [9, 1]]

ソートする要素の優先順位を変えたい場合はitemgetterで要素を指定します。

from operator import itemgetter

li.sort(key=itemgetter(1, 0))
soted_li = sorted(li, key=itemgetter(1, 0))
[[9, 1], [7, 2], [1, 3], [2, 4], [2, 7], [5, 8], [7, 8]]

辞書型のソート

辞書型ではsortが使えないので、sortedのみになります。

ソートするのは下記になります。

dic = {
    7: 1,
    2: 3,
    5: 8,
    1: 2,
    4: 7,
    6: 3,
}

keys

辞書のキーのみをソートする場合は下記になります。

sorted_keys = sorted(dic.keys())
[1, 2, 4, 5, 6, 7]

values

辞書のバリューのみをソートする場合は下記になります。

sorted_values = sorted(dic.values())
[1, 2, 3, 3, 7, 8]

items

キーとバリューの組み合わせでソートする場合はitemgetterを利用します。

itemgetter(0)とするとキーでソートされます。

from operator import itemgetter
sorted_items = sorted(dic.items(), kes=itemgetter(0))
[(1, 2), (2, 3), (4, 7), (5, 8), (6, 3), (7, 1)]

itemgetter(1)とするとバリューでソートされます。

from operator import itemgetter
sorted_items = sorted(dic.items(), key=itemgetter(1))
[(7, 1), (1, 2), (2, 3), (6, 3), (4, 7), (5, 8)]

参考

タイトルとURLをコピーしました