You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:15:07