首页 > 解决方案 > Python:按不同顺序按多列对嵌套的字符串和数字列表进行排序

问题描述

给定一个嵌套列表,例如

a = [["a", "z"], ["b", "y"], ["c", "x"], ["d", "x"], ["e", "x"]]

# should output
a = [['e', 'x'], ['d', 'x'], ['c', 'x'], ['b', 'y'], ['a', 'z']]

如果只有一个排序发生重复,我将如何按第二列按升序排序,然后按第一列降序排序?

我基本上是在尝试实现类似 SQL 的 SORT BY col1 ASC、col2 DESC、col3 ASC ...

我可以做类似的事情, sorted(sorted(a, key=lambda x:(x[1])), key=lambda x:(x[0]), reverse=True)但我想知道是否有更好更简单的方法来实现这一点。

标签: pythonpython-3.xlistsorting

解决方案


您可以使用

sorted(a, key=lambda x: (x[1], [-ord(x) for x in x[0]]))

这适用于任何长度的字符串。这个想法是使用每个字符的序数值作为比较器x中的第二个元素。key一元-反转值,给出所需的相反顺序。


推荐阅读