Python如何按字典值排序且保留所有含重复值的键值对
问题原因
你写的代码丢失重复value对应的键值对,核心问题在内层循环的break逻辑:每次匹配到第一个对应value的key后就直接终止内层循环,剩余相同value的key永远不会被遍历添加到新字典中。同时你直接遍历排序后的value列表,遇到重复value时会重复匹配同一个最先找到的key,自然无法添加其他同value的键值对。
最优解决方法
Python原生支持直接对字典的键值对元组排序,不需要自己写多层循环,天然支持保留所有重复value对应的键值对,代码如下:
# 包含重复value的字典示例 dict1 = {0:6, 1:1, 2:9, 3:4, 4:6} # 对键值对按value排序后直接转字典 sorted_dict = dict(sorted(dict1.items(), key=lambda item: item[1])) print(sorted_dict)
运行输出为:
{1: 1, 3: 4, 0: 6, 4: 6, 2: 9}
所有键值对都会完整保留,且按value升序排列。
原写法的修改方案(不推荐,仅做逻辑参考)
如果你要保留原来的两层循环逻辑,需要新增一个列表记录还未被添加的key,匹配到一个key就将其移出待匹配列表,避免重复匹配:
dict1 = {0:6, 1:1, 2:9, 3:4, 4:6} sorted_values = sorted(dict1.values()) sorted_dict = {} # 存储还未被添加到新字典的key remaining_keys = list(dict1.keys()) for i in sorted_values: for k in remaining_keys: if dict1[k] == i: sorted_dict[k] = dict1[k] # 已添加的key移出待匹配列表,避免重复匹配 remaining_keys.remove(k) break print(sorted_dict)
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

