如何实现Python两个关联列表按数值降序、字母升序多条件排序
解决方法
你原来的写法直接加reverse=True会让list1降序的同时,list2也跟着做降序排序,和你要的同数值下list2升序的要求刚好相反,只需要自定义排序的key即可实现双条件排序:
完整代码示例
# 注意list2的字符要加引号定义为字符串,否则会报变量未定义错误 list1 = [0.11, 0.11, 0.22, 0.11, 0.22] list2 = ['a', 'o', 'q', 'd', 'e'] # 自定义排序规则:第一优先级按list1数值降序,第二优先级按list2字符升序 list1, list2 = zip(*sorted(zip(list1, list2), key=lambda x: (-x[0], x[1]))) # 如果需要输出为列表而非元组,加一步转换即可 list1, list2 = list(list1), list(list2) print(list1) # 输出:[0.22, 0.22, 0.11, 0.11, 0.11] print(list2) # 输出:['e', 'q', 'a', 'd', 'o']
规则说明
sorted函数的key参数会给每一组配对的(list1元素, list2元素)生成排序用的键值:
- 第一个键值为
-x[0]:把list1的数值取负,默认升序排序时,数值越大的元素负数值越小,会排在更前面,等价于实现list1的降序 - 第二个键值为
x[1]:当第一个键值相等(即list1数值相同)时,直接按list2的字符做默认升序排序,刚好符合需求
内容的提问来源于stack exchange,提问作者HI9000
相关产品推荐
相关产品推荐

