情况是这样的,我有一个清单,如:
(1,a),(1,b),(5,c)
我想对列表进行排序,这样它首先取决于按降序排列的数字,然后是按升序排列的字符。
我试过:
sorted(theList, key = lambda x:(x[0], x[1]), reverse = True)但结果是按两个键的降序排列的。很明显,反向只取了一个变量,我搜索了网络,却找不到解决方案。请帮帮我!谢谢!
发布于 2016-08-27 03:04:28
如果元组中的第一个元素是整数,则可以按其负值进行排序:
sorted(theList, key=lambda (num, letter): (-num, letter))发布于 2016-08-27 02:41:41
根据Python文档:
内置排序()函数保证稳定。如果保证不更改比较相等的元素的相对顺序,则排序是稳定的--这有助于对多个传递进行排序(例如,按部门排序,然后按薪等排序)。
因此,一种简单的方法是进行两次排序:
sorted(theList, key = lambda x:x[1])
sorted(theList, key = lambda x:x[0], reverse = True)或者如果你真的想要一条线,你可以这样做:
sorted(thisList, key = lambda x:x[0] * 26 - (ord(x[1]) - ord('a')), reverse = True)这个一行假定所有字符都是小写的.它所做的是使每两个连续的数字都有一个26而不是1的步长,字符as映射到0-25,作为一个更精细的步骤。由于字符是升序的,所以我们从缩放的数字值中减去它。
这个一行是一种黑客,因为如果x[1]没有范围(也就是一个数字),它就不能工作。
https://stackoverflow.com/questions/39176918
复制相似问题