例えば、次のような2次元リストがあるとします。
data = [['きゅうり',1,4],['いちご',2,6],['にんじん',2,1],['とうふ',1,0]]
上記のリストを下記のように、2次元目の第2引数と第3引数の要素を桁のようにみなして昇順にソートする方法を説明します。
2番目の要素で昇順にして、そのまま3番目の要素で昇順にするわけです。
data = [['とうふ',1,0],['きゅうり',1,4],['にんじん',2,1],['いちご',2,6]]
#多次元リストを複数キーでソートする
今回、多次元リストのソートには、関数sorted()とlambda式というものを使います。
data = [['きゅうり',1,4],['いちご',2,6],['にんじん',2,1],['とうふ',1,0]]
#昇順でソートする
sorted_data = sorted(data, key=lambda x:(x[1], x[2]))
print(sorted_data) #data = [['とうふ',1,0],['きゅうり',1,4],['にんじん',2,1],['いちご',2,6]]
昇順にソートできました!!
#おまけ
####降順にソートしたい場合
data = [['きゅうり',1,4],['いちご',2,6],['にんじん',2,1],['とうふ',1,0]]
#降順でソートする
sorted_data = sorted(data, key=lambda x:(x[1], x[2]), reverse=True)
print(sorted_data) #data = [['とうふ',1,0],['きゅうり',1,4],['にんじん',2,1],['いちご',2,6]]
関数sorted()の第3引数にreverse=Trueを追加するだけです。
####itemgetterを使う場合
from operator import itemgetter
data = [['きゅうり',1,4],['いちご',2,6],['にんじん',2,1],['とうふ',1,0]]
#昇順でソートする
sorted_data = sorted(data, key=itemgetter(1, 2))
print(sorted_data) #data = [['とうふ',1,0],['きゅうり',1,4],['にんじん',2,1],['いちご',2,6]]
コードがスッキリしますね!