環境
Python3.4で実行した。(3.7とかでも変わらないはず)
二つのやり方
二つのやり方がある。Operatorモジュールの方が高速。
lambdaを使う
A = [[2, 'a'], [1, 'c'], [3, 'b']]
A.sort(key=lambda x: x[0])
print(A)
# [[1, 'c'], [2, 'a'], [3, 'b']]
A.sort(key=lambda x: x[1])
print(A)
# [[2, 'a'], [3, 'b'], [1, 'c']]
Operatorモジュールを使う
from operator import itemgetter
A = [[2, 'a'], [1, 'c'], [3, 'b']]
A.sort(key=itemgetter(0))
print(A)
# [[1, 'c'], [2, 'a'], [3, 'b']]
A.sort(key=itemgetter(1))
print(A)
# [[2, 'a'], [3, 'b'], [1, 'c']]
昇順、降順を組み合わせたソート
一つ目の要素を降順にソートする。一つ目の要素の値が同じ場合は、二つ目の要素を昇順にソートする。
from operator import itemgetter
A = [[2, 'd'], [2, 'a'], [1, 'c'], [3, 'b']]
A.sort(key=itemgetter(1))
A.sort(key=itemgetter(0), reverse=True)
print(A)
# 実行結果:
# [[3, 'b'], [2, 'a'], [2, 'd'], [1, 'c']]
メモ
破壊的にソートさせたくない場合は、sorted
を使う。
sorted(A, key=lambda x: x[0])
逆順で並べる。
A = [[2, 'a'], [1, 'c'], [3, 'b']]
A.sort(key=lambda x: x[0], reverse=True)
print(A)
# [[3, 'b'], [2, 'a'], [1, 'c']]