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

如何修改Python代码实现多Deal ID的统计计算需求

解决多Deal ID自动适配的统计问题

我来帮你优化代码,让它能自动适配任意数量的Deal ID,同时解决原代码里的潜在bug:

首先,先分析下原代码的问题:

  • 临时变量(比如sum_1_M、list_1)的命名容易混淆,而且每次循环都要手动重置,既麻烦又容易出错
  • 没有处理某个Deal ID没有M行(会触发除以0的错误)或者没有W行(空列表访问索引报错)的边界情况
  • 嵌套循环的写法不够简洁,维护起来比较费劲

下面是优化后的代码,用字典来分组统计每个Deal ID的数据,完全支持自动适配新增的ID:

filename = '/home/salman/Desktop/input.txt'
rows = [['507', 'W', '1000', '1'], ['1', 'M', '6', '2'], ['1', 'W', '1400', '3'], ['1', 'M', '8', '8'], ['1', 'T', '101', '10'], ['507', 'M', '4', '12'], ['1', 'W', '1700', '15'], ['1', 'M', '7', '16'], ['507', 'M', '8', '20']]

# 初始化两个字典,分别存储M类型和W类型的统计数据
# m_stats: key=Deal ID, value={'sum': M行第3元素总和, 'count': M行数量}
m_stats = {}
# w_stats: key=Deal ID, value=[所有W行第3元素的数值列表]
w_stats = {}

# 遍历所有行,分组统计
for row in rows:
    deal_id = row[0]
    flag = row[1]
    num = int(row[2])
    
    if flag == 'M':
        # 如果当前ID不在m_stats里,先初始化结构
        if deal_id not in m_stats:
            m_stats[deal_id] = {'sum': 0, 'count': 0}
        m_stats[deal_id]['sum'] += num
        m_stats[deal_id]['count'] += 1
    elif flag == 'W':
        # 如果当前ID不在w_stats里,先初始化空列表
        if deal_id not in w_stats:
            w_stats[deal_id] = []
        w_stats[deal_id].append(num)

# 获取所有唯一的Deal ID,包括那些只有T行的ID
all_deal_ids = set(row[0] for row in rows)

# 遍历输出每个ID的统计结果(sorted可选,让ID按顺序输出)
for deal_id in sorted(all_deal_ids):
    # 处理M类型的平均值:如果有M行就计算,否则显示N/A
    m_avg = m_stats[deal_id]['sum'] / m_stats[deal_id]['count'] if deal_id in m_stats else None
    # 处理W类型的最小/最大值:如果有W行就计算,否则显示N/A
    w_min = min(w_stats[deal_id]) if deal_id in w_stats else None
    w_max = max(w_stats[deal_id]) if deal_id in w_stats else None
    
    # 格式化输出,根据实际需求调整空值显示方式
    print(f"{deal_id} {w_min or 'N/A'} {w_max or 'N/A'} {int(m_avg) if m_avg is not None else 'N/A'}")

优化后的优势:

  • 自动适配所有ID:不管新增多少个Deal ID(比如2、5、6等),都会自动收集并统计
  • 健壮性更强:处理了没有M行或W行的边界情况,不会报错
  • 逻辑清晰易维护:用字典分组存储每个ID的数据,避免了临时变量反复重置的混乱
  • 可扩展性好:如果以后需要新增其他类型的统计,直接在循环里加判断即可

运行这段代码,你会得到和原代码一致的结果,而且新增任意ID后都能正常统计。

内容的提问来源于stack exchange,提问作者Logitech Flames

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:37:35