6

タプルのリストがあります:

li = [('fink', 3), ('flip', 3), ('flock', 4), ('foo', 12), ('foot', 20), ('football', 20), ('futz', 10), ('flip', 3), ('flank', 3), ('flop', 3)]

リストを最初に降下番号で並べ替え、次にアルファベット順に並べ替えるにはどうすればよいですか? 結果は次のようになります。

('foot', 20)
('football', 20)
('foo', 12)
('futz', 10)
('flock', 4)
('fink', 3)
('flip', 3)
('flake', 3)
('flop', 3)

from operator import itemgetter

sorted_li = sorted(li, key=itemgetter(1,0), reverse=True)

上記のコードは降順で正しくソートされますが、単語はアルファベット順にソートされません。

4

3 に答える 3

11

これは、単一の には複雑すぎitemgetterます。lambda代わりに使用してください:

sorted_li = sorted(li, key=lambda x: (-x[1], x[0]))

を使用した 2 つの連続した並べ替えとほぼ同じ速度itemgetterですが、コードが少なくなり、おそらくより読みやすくなります。

于 2012-07-12T10:55:00.147 に答える
6

Python のソートは安定しているため、2 回ソートするのが最も簡単です。

sorted_li  = sorted(li, key=itemgetter(1), reverse=True)
sorted_li.sort(key=itemgetter(0))
于 2012-07-12T10:54:56.840 に答える