读取txt文件构建含字符串与数值的字典,升序排序结果异常如何解决
问题原因
你遇到的排序错误由两个核心原因导致:
- 代码直接将读取到的数值以字符串类型存储,
sorted函数对字符串默认按字典序逐字符比较,而非按数值大小比较,因此会出现394,98排在103,5前面的错误 - 数值使用逗号作为小数分隔符,无法直接转换为Python默认的数值类型,需要先做格式替换
修复后的代码
a_dictionary = {} # 使用with上下文管理器自动处理文件关闭,避免资源泄漏 with open("example.txt", "r", encoding="utf-8") as file: for line in file: # 先去除行尾换行符再拆分 letter, num_str = line.strip().split() # 将逗号替换为Python识别的小数点,转为浮点型 num_value = float(num_str.replace(",", ".")) a_dictionary[letter] = num_value # 按数值大小升序排序 sort_result = sorted(a_dictionary.items(), key=lambda x: x[1]) for item in sort_result: # 输出时将小数点换回逗号,和原始格式保持一致 print(item[0], str(item[1]).replace(".", ","))
修改说明
- 读取阶段把数值从字符串转为浮点型,排序逻辑变为数值大小比较,彻底解决字典序导致的排序错误
- 增加字符串替换逻辑适配逗号作为小数分隔符的格式
- 用
with open替代直接打开文件,优化资源管理
内容的提问来源于stack exchange,提问作者tuborg10
相关产品推荐
相关产品推荐

