我几天前才开始学习 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/