1. ホーム
  2. python

[解決済み] 複数の属性でリストを並べ替える?

2022-03-16 04:17:34

質問

リストのリストを持っています。

[[12, 'tall', 'blue', 1],
[2, 'short', 'red', 9],
[4, 'tall', 'blue', 13]]

もし、ある要素、例えば背の高い/低い要素でソートしたい場合は、次のようにします。 s = sorted(s, key = itemgetter(1)) .

で並べ替えたい場合 両方とも 高さ/短さおよび色については、各要素について1回ずつ、2回ソートを行うことができますが、もっと手っ取り早い方法はないでしょうか?

解決方法は?

キーは、タプルを返す関数にすることができます。

s = sorted(s, key = lambda x: (x[1], x[2]))

または、次のようにしても同じことができます。 itemgetter (これはより高速で、Pythonの関数呼び出しを避けることができます)。

import operator
s = sorted(s, key = operator.itemgetter(1, 2))

そして、ここで sort を使用する代わりに sorted を作成し、再割り当てを行います。

s.sort(key = operator.itemgetter(1, 2))