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

Python实现按ID分组计算元组第二个元素平均值并生成新列表

解决方案:按ID分组计算Rating平均值

嘿,作为Python新手碰到这种数据聚合的问题很正常,我给你几个实用的实现方法,一步步来搞定它!

思路说明

我们需要先把相同ID的所有Rating值归为一组,然后计算每组的平均值,最后把结果转换成你需要的元组列表格式。用字典来做分组是最直观高效的方式,下面是几种具体实现:


方法1:基础字典分组(适合新手理解)

这种方法逻辑最清晰,一步步拆分操作,容易跟着理解:

# 假设你的原始数据示例
norm_rating = [(7, 80), (7, 70), (7, 70), (34, 60), (36, 65), (36, 65)]

# 第一步:用字典存储每个ID对应的所有Rating
id_ratings = {}
for id_num, rating in norm_rating:
    # 如果ID不在字典里,先初始化一个空列表
    if id_num not in id_ratings:
        id_ratings[id_num] = []
    # 把当前Rating添加到对应ID的列表中
    id_ratings[id_num].append(rating)

# 第二步:计算每个ID的平均值,生成目标列表
result = []
for id_num, ratings in id_ratings.items():
    avg_rating = sum(ratings) / len(ratings)
    # 用round()控制小数位数,和示例输出的格式匹配
    result.append((id_num, round(avg_rating, 1)))

print(result)
# 输出:[(7, 73.3), (34, 60.0), (36, 65.0)]

方法2:用collections.defaultdict简化代码

如果不想每次判断ID是否在字典里,可以用Python标准库的defaultdict来自动初始化列表,代码更简洁:

from collections import defaultdict

norm_rating = [(7, 80), (7, 70), (7, 70), (34, 60), (36, 65), (36, 65)]

# 自动为新ID创建空列表
id_ratings = defaultdict(list)
for id_num, rating in norm_rating:
    id_ratings[id_num].append(rating)

# 用列表推导式快速生成结果
result = [(id_num, round(sum(ratings)/len(ratings), 1)) 
          for id_num, ratings in id_ratings.items()]

print(result)

方法3:高效统计(适合大数据量)

如果你的数据量很大,不想存储所有Rating值(节省内存),可以直接统计每个ID的Rating总和和出现次数,再计算平均值:

norm_rating = [(7, 80), (7, 70), (7, 70), (34, 60), (36, 65), (36, 65)]

# 字典存储每个ID的(total_rating, count)
id_stats = {}
for id_num, rating in norm_rating:
    if id_num in id_stats:
        total, count = id_stats[id_num]
        id_stats[id_num] = (total + rating, count + 1)
    else:
        # 第一次出现该ID,总和就是当前rating,计数为1
        id_stats[id_num] = (rating, 1)

# 计算平均值并生成结果
result = [(id_num, round(total/count, 1)) 
          for id_num, (total, count) in id_stats.items()]

print(result)

注意点

  • 如果不需要保留一位小数,可以去掉round(avg_rating, 1),直接用avg_rating即可
  • 示例中的原始数据是根据你的输出反推的,你只需要把自己的norm_rating变量替换进去就行

内容的提问来源于stack exchange,提问作者King Awan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:31:12