首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python对两个键进行排序,两个订单

问Python对两个键进行排序,两个订单
EN

Stack Overflow用户
提问于 2016-08-27 02:36:39
回答 2查看 5K关注 0票数 2

情况是这样的,我有一个清单,如:

(1,a),(1,b),(5,c)

我想对列表进行排序,这样它首先取决于按降序排列的数字,然后是按升序排列的字符。

我试过:

代码语言:javascript
复制
sorted(theList, key = lambda x:(x[0], x[1]), reverse = True)

但结果是按两个键的降序排列的。很明显,反向只取了一个变量,我搜索了网络,却找不到解决方案。请帮帮我!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-27 03:04:28

如果元组中的第一个元素是整数,则可以按其负值进行排序:

代码语言:javascript
复制
sorted(theList, key=lambda (num, letter): (-num, letter))
票数 9
EN

Stack Overflow用户

发布于 2016-08-27 02:41:41

根据Python文档:

内置排序()函数保证稳定。如果保证不更改比较相等的元素的相对顺序,则排序是稳定的--这有助于对多个传递进行排序(例如,按部门排序,然后按薪等排序)。

因此,一种简单的方法是进行两次排序:

代码语言:javascript
复制
sorted(theList, key = lambda x:x[1])
sorted(theList, key = lambda x:x[0], reverse = True)

或者如果你真的想要一条线,你可以这样做:

代码语言:javascript
复制
sorted(thisList, key = lambda x:x[0] * 26 - (ord(x[1]) - ord('a')), reverse = True)

这个一行假定所有字符都是小写的.它所做的是使每两个连续的数字都有一个26而不是1的步长,字符as映射到0-25,作为一个更精细的步骤。由于字符是升序的,所以我们从缩放的数字值中减去它。

这个一行是一种黑客,因为如果x[1]没有范围(也就是一个数字),它就不能工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39176918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档