如何修改Python代码 使用lambda展示排序后行数据的缺失字段
问题核心原因
你的代码存在3个问题导致输出不符合预期:
- 存储统计数据时把cat(分类名称)字段存入了key,但生成排序列表时直接丢弃了该字段,输出自然不会显示分类内容
- 构造排序列表时元素顺序错误,你按
[pname, cnt, grp]的顺序存储,但预期要求的顺序是[grp, pname, cnt, cat],字段顺序完全颠倒 - 输出时没有做对齐处理,也没有预留足够占位宽度,导致排版错乱
修正后代码
from collections import defaultdict data = defaultdict(int) # 存储每个统计key对应的原始字段值,避免统计合并后丢失信息 info_map = {} num = 0 with open("Samplefile.txt", encoding='utf8', errors='ignore') as f: for line in f: grp, pname, cnt, cat = line.split(maxsplit=3) grp = grp.strip() pname = pname.strip() cat = cat.strip() cnt = int(cnt) key = (pname, cat, grp) data[key] += cnt info_map[key] = (grp, pname, cat) # 排序时保留完整key,方便后续取对应字段 sorted_data = sorted(data.items(), key=lambda x: x[1], reverse=True) for key, total_cnt in sorted_data[:10]: num += 1 grp, pname, cat = info_map[key] # 按预期格式对齐输出 print(f"{num:>1} -> {grp:>5} {pname:<36} {total_cnt:<3} {cat}")
调整说明
- 新增
info_map字典存储每个统计维度对应的原始字段值,避免统计完还要从key里拆分字段,降低出错概率 - 排序逻辑保留完整的key和统计值,不提前裁剪字段,防止数据丢失
- 输出时严格按照预期的字段顺序排列,同时给每个字段设置固定占位宽度保证对齐:grp右对齐占5位,pname左对齐占36位,cnt左对齐占3位,最后直接输出分类名称
- 用f-string代替format方法,写法更直观,不容易出现占位符对应错误的问题
内容的提问来源于stack exchange,提问作者rbutrnz
相关产品推荐
相关产品推荐

