python - 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)
但我想知道是否有更好更简单的方法来实现这一点。
解决方案
您可以使用
sorted(a, key=lambda x: (x[1], [-ord(x) for x in x[0]]))
这适用于任何长度的字符串。这个想法是使用每个字符的序数值作为比较器x
中的第二个元素。key
一元-
反转值,给出所需的相反顺序。
推荐阅读
- r - 转换为长格式后删除重复项
- sqlite - 原生平台上适用于 Uno 的 SqlLite - 怎么做?
- sql-server - 在 sql 列中查找唯一数据的总和
- android - 带有 proguard 文件的 consumerProguardFiles 不适用于库
- microsoft-graph-api - 邮箱消息的 Microsoft Graph API DeltaLinks 未返回有关更改的最少数据
- swiftui - SwiftUI TabView 动画不给出任何动画
- javascript - 如何像框架一样检查url参数?
- javascript - 单击角度时隐藏按钮
- ignite - 为什么使用 sql 查询时 Apache Ignite 响应为空
- reactjs - AceEditor 中是否有 .conf 文件的模式?