Python中解决%f格式化输出自动截断浮点数及调整键值对打印分隔符的问题
解决浮点数输出截断与分隔符问题
针对你遇到的两个问题,我来一步步给你解决方案:
1. 让浮点数输出完整原始值
你用%f格式化时出现截断,是因为%f默认只保留6位小数并自动四舍五入。要输出未截断的原始浮点数,有几种靠谱的方式:
- 用
%s代替%f:%s会直接输出浮点数的字符串表示,不会做任何截断或舍入:print('%s,%s' %(ord_list[i][0], ord_list[i][1])) - 推荐用f-string(Python 3.6+):这是现在Python里最简洁直观的格式化方式,同样能输出浮点数的完整内容:
print(f"{ord_list[i][0]},{ord_list[i][1]}") - 如果需要控制小数位数:要是你想保留较多小数位而非全部,可以指定足够长的位数,比如
%.15f,不过要注意浮点数本身是二进制存储,可能存在微小的精度偏差:print('%s,%.15f' %(ord_list[i][0], ord_list[i][1]))
2. 把输出分隔符改成逗号(去掉空格)
你说直接打印键和平均值时出现空格,这是因为print(a, b)这种多参数写法会让Python自动用空格分隔参数。解决这个问题的关键是把两者合并成一个字符串再输出——上面的格式化写法已经帮你搞定了,不管是%s,%s还是f-string的{key},{value},都是把键和值拼接成带逗号的单个字符串,不会产生空格。
优化后的完整代码
另外,你的代码里有些冗余的地方可以简化,比如OrderedDict在Python 3.7+其实没必要用(普通字典已经默认有序),排序逻辑也能合并得更简洁。下面是调整后的代码,同时解决了你的两个问题:
import csv from statistics import mean with open('grades.txt', 'r') as f_handle: csv_reader = csv.reader(f_handle) # 一步完成字典构建和值的类型转换 dct = {row[0]: [int(i) for i in row[1:]] for row in csv_reader} # 计算平均值并直接排序,得到元组列表 sorted_items = sorted( [(key, mean(values)) for key, values in dct.items()], key=lambda x: x[1] ) # 打印排序后的列表(可选,方便你查看) print(sorted_items) # 按要求格式化输出 for key, avg in sorted_items: # f-string实现逗号分隔+完整浮点数输出 print(f"{key},{avg}")
这样运行后,你就能得到完整的浮点数输出,并且键和平均值之间只有逗号分隔啦。
内容的提问来源于stack exchange,提问作者Blame-it-on-me
相关产品推荐
相关产品推荐

