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]))

它的速度与使用 的两个连续排序大致相同itemgetter,但它的代码更少并且可能更具可读性。

于 2012-07-12T10:55:00.147 回答
6

由于 Python 的排序是稳定的,所以最容易排序两次:

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

由于 Python 的排序是稳定的,所以最容易排序两次:

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

但请注意,您必须首先使用您的最低优先级顺序,然后其他基于优先级。最高优先级的顺序必须是最后一个。当您尝试使用 Sorted 功能时,这是您必须考虑的最重要的事情。

于 2018-12-10T22:48:49.017 回答