LoginSignup
44
34

More than 3 years have passed since last update.

[Python] 多次元リストを複数キーでソートする

Last updated at Posted at 2019-06-26

例えば、次のような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]]

コードがスッキリしますね!

44
34
9

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
44
34