Pythonの多次元リストのソートについて
Pythonの多次元リストをソートする時にいつも忘れるのでメモ。
TL;DR
多次元リストを二次元目の値でソートする方法
key=lambda x:x[1]
とします。
l = [[111, "さしすせそ"], [222, "あいうえお"], [333, "たちつてと"], [444, "かきくけこ"]] sorted_l = sorted(l, key=lambda x:x[1]) print(sorted_l) # 実行結果 [[222, 'あいうえお'], [444, 'かきくけこ'], [111, 'さしすせそ'], [333, 'たちつてと']]
2次元目の値でソートできました。
なにをやっているのか
sorted()の2つめの引数に関数を設定することができます。
ソートするときに関数を適用した値をソートします。
上の例ではラムダ式を適用した結果をソートしているのです。
絶対値でソートするときは以下のようにします。
l = [2,-3,4,1] sorted_l = sorted(l, key=abs) print(sorted_l) # [1, 2, -3, 4]
絶対値の昇順でソートできました。
なお、返ってくるリストには 関数適用前の値 が入ります。
この例であれば、-3が入っていることがわかります。
ついでに
降順にソートするときは reverse=True
とします。
l = [2,-3,4,1] sorted_l = sorted(l, key=abs, reverse=True) print(sorted_l) # [4, -3, 2, 1]