Python自定义多优先级规则字典排序代码错误修复咨询
问题修复方案
问题原因
- 排序优先级逻辑写反:第一优先级要求总和越大排名越靠前,属于降序规则,原代码中未对sum结果取负,sorted默认按升序排列,导致优先级完全错误,容易让你误以为相同value的条目被覆盖。
- 低版本Python兼容性问题:Python 3.6及更早版本的原生dict不保留插入顺序,即使sorted排序正确,转成dict后顺序也会错乱。
- 额外说明:Python字典的key天生唯一,排序逻辑本身不会导致条目覆盖,如果确实出现条目消失,请先检查原始字典定义时是否写了重复key,重复key会在字典定义阶段就覆盖前面的条目。
修改后代码
Python 3.7+ 版本(原生dict支持有序)
# 请补全你自己的order_list完整内容 order_list = ['a', 'z', 'b', 'c', 'y'] d = {'a': [0, 1], 'b': [1, 0], 'd': [1, 1], 'e': [2, 3], 'g': [5, 0], 'h': [2, 0]} sorted_dict = dict(sorted(d.items(), key=lambda item: ( -sum(item[1]), # 第一优先级:总和降序,加负号实现 -min(item[1]), # 第二优先级:最小值降序,加负号实现 order_list.index(item[0]) # 第三优先级:顺序列表索引升序,无需修改 )))
Python 3.6及更早版本
需引入OrderedDict保证顺序:
from collections import OrderedDict order_list = ['a', 'z', 'b', 'c', 'y'] d = {'a': [0, 1], 'b': [1, 0], 'd': [1, 1], 'e': [2, 3], 'g': [5, 0], 'h': [2, 0]} sorted_dict = OrderedDict(sorted(d.items(), key=lambda item: ( -sum(item[1]), -min(item[1]), order_list.index(item[0]) )))
内容的提问来源于stack exchange,提问作者Cookie
相关产品推荐
相关产品推荐

