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

如何修改Python代码 使用lambda展示排序后行数据的缺失字段

问题核心原因

你的代码存在3个问题导致输出不符合预期:

  1. 存储统计数据时把cat(分类名称)字段存入了key,但生成排序列表时直接丢弃了该字段,输出自然不会显示分类内容
  2. 构造排序列表时元素顺序错误,你按[pname, cnt, grp]的顺序存储,但预期要求的顺序是[grp, pname, cnt, cat],字段顺序完全颠倒
  3. 输出时没有做对齐处理,也没有预留足够占位宽度,导致排版错乱

修正后代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:36:05