我几天前才开始学习 Python,我想用它来实现我的小项目。我需要按数值降序对 (string, integer) 列表进行排序,但如果多个元组的数字相同,则按字母顺序排序。所以我有一个 list ,说:

tuples = [('ggg', 5), ('aaa', 5), ('bbb', 6), ('zzz', 6)]
tuples.sort(key=lambda score: score[1], reverse=True)

这将返回:
[('bbb', 6), ('zzz', 6), ('ggg', 5), ('aaa', 5)]

但我想得到的是:
[('bbb', 6), ('zzz', 6), ('aaa', 5), ('ggg', 5)]

在 Java 中,我刚刚为自定义元组实现了一个比较器:
class Pair {
    public final String s;
    public final Integer i;

    public Pair(String s, Integer i) {
        this.s = s;
        this.i = i;
    }
}

class PairComparator implements Comparator<Pair> {

    @Override
    public int compare(Pair p1, Pair p2) {
        int c = p1.i.compareTo(p2.i);
        return (c == 0) ? p1.s.compareTo(p2.s) : c * (-1);
    }
}

但我不确定如何在 Python 中的 lambda 表达式中执行此操作。

最佳答案

也许最简单的方法是让 key 返回一个元组并将分数乘以 -1。例如:

>>> tuples.sort(key=lambda x: (-x[1], x[0]))
>>> tuples
[('bbb', 6), ('zzz', 6), ('aaa', 5), ('ggg', 5)]

这将按降序对整数进行排序,然后按升序对字符串进行排序。

关于python - 元组列表的自定义排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32807791/

10-11 22:06
查看更多