3

很容易实现常规的双重排序:

pairs = [(1, 2), (2, 1), (1, 3), (2, 4), (3, 1)]

sorted(pairs,key=lambda x: (x[0],x[1]))
# out: [(1, 2), (1, 3), (2, 1), (2, 4), (3, 1)]

我很感兴趣如何以相反的顺序使用第二个元素。这可以通过首先按第一项分组对然后将排序的第二项添加在一起来轻松实现。我已经使用itertools.groupby和实现了这一点defaultdict。尽管如此,它仍然比常规的双重排序复杂得多,所以我想知道是否有一个巧妙的技巧可以以更简洁的方式完成它。

double_sort(pairs)
# out: [(1, 3), (1, 2), (2, 4), (2, 1), (3, 1)]

PS!我知道如何做到这一点,numpy.argsort并且最希望看到一个标准的 lib 方法。

4

1 回答 1

4

这适用于数字和类似的数据类型

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

这仅适用于 Python 2 中的所有可比较类型 :(

sorted(pairs, lambda x, y: cmp(x[0], y[0]) or cmp(y[1], x[1]))
于 2013-01-12T15:11:59.563 回答