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

排序含重复浮点值的OrderedDict时出现重复键名的问题

问题:排序OrderedDict时出现重复姓名

我有一个名为dict的OrderedDict,存储学生姓名和浮点类型的平均值,想要把排序后的平均值及对应姓名存入文件,但循环查找键时输出出现了重复的姓名。

原代码

print(dict)
sorted_list = sorted(dict.values() , key = float)

sorted_dict = list()
for i in sorted_list:
    for j in dict:
        if dict[j] == i:
            sorted_dict.append([j,dict[j]])
            break
print(sorted_dict)

输出结果

OrderedDict([('mandana', '5'), ('hamid', '6.066666666666666'), ('sina', '11.285714285714286'), ('sara', '9.75'), ('soheila', '7.833333333333333'), ('ali', '5'), ('sarvin', '11.375')])

[['mandana', '5'], ['mandana', '5'], ['hamid', '6.066666666666666'], ['soheila', '7.833333333333333'], ['sara', '9.75'], ['sina', '11.285714285714286'], ['sarvin', '11.375']]

问题原因

字典里存在相同的平均值(mandana和ali的分数都是5),你先对values()排序得到包含两个5的列表。内层循环每次遇到5时,都会找到第一个匹配的键mandana就break,导致第二个5仍然匹配到mandana,ali完全被忽略,最终出现重复的mandana。

解决方案

直接对OrderedDict的items()进行排序,不需要单独排序values再反向查找键,既高效又能保留所有键值对:

from collections import OrderedDict

# 示例OrderedDict定义
student_dict = OrderedDict([
    ('mandana', '5'), 
    ('hamid', '6.066666666666666'), 
    ('sina', '11.285714285714286'), 
    ('sara', '9.75'), 
    ('soheila', '7.833333333333333'), 
    ('ali', '5'), 
    ('sarvin', '11.375')
])

# 按分数的浮点值排序键值对
sorted_students = sorted(student_dict.items(), key=lambda x: float(x[1]))
print(sorted_students)

正确输出结果

[('mandana', '5'), ('ali', '5'), ('hamid', '6.066666666666666'), ('soheila', '7.833333333333333'), ('sara', '9.75'), ('sina', '11.285714285714286'), ('sarvin', '11.375')]

处理后可以直接将sorted_students写入文件,不会出现重复或遗漏的学生信息。

内容的提问来源于stack exchange,提问作者Sapoora Alavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:48:58