如何按数字降序、字母升序对Python嵌套列表进行排序
解决嵌套列表的多条件排序问题
嘿,这事儿其实很简单,Python的排序功能支持多条件排序,咱们只需要调整排序的key参数就行!
你已经搞定了数字降序,现在要加上“数字相同时按字母升序”的规则,只需要给排序函数传入一个元组作为排序依据:
- 第一个元素是数字的负数,这样默认的升序排序就会变成原数字的降序(比如5的负数是-5,比2的负数-2小,所以-5会排在-2前面,对应原数字5排在2前面)
- 第二个元素是字母本身,当第一个条件(数字)相同时,就会按字母的自然顺序升序排列
直接上代码示例:
mylist = [['a', 5], ['l', 2], ['u', 1], ['t', 1], ['q', 1], ['o', 1], ['e', 1]] # 原地修改列表的排序方式 mylist.sort(key=lambda x: (-x[1], x[0])) print(mylist) # 输出: [['a', 5], ['l', 2], ['e', 1], ['o', 1], ['q', 1], ['t', 1], ['u', 1]] # 如果不想修改原列表,用sorted()返回新列表 sorted_list = sorted(mylist, key=lambda x: (-x[1], x[0])) print(sorted_list) # 输出和上面一致
解释一下这个lambda x: (-x[1], x[0]):
- 对于每个子列表
x,-x[1]把数字取反,让大数字的优先级更高(降序) - 当两个子列表的数字相同时,就会比较
x[0]也就是字母,Python默认按字符串的Unicode编码升序排列,正好符合你要的e < o < q < t < u的顺序
这样就能完美得到你期望的排序结果啦!
内容的提问来源于stack exchange,提问作者James Paul
相关产品推荐
相关产品推荐

