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

如何按公共键值对汇总嵌套列表字典中的重复元素值?

汇总嵌套列表字典中相同用户的评分值

假设你有一个嵌套结构的列表(列表套列表套字典),需要把每个子列表里相同user键对应的rating值累加起来,同时保留每个用户唯一的条目,下面是具体的实现方案:

示例数据

data = [
    [ {'user': 1, 'rating': 0}, {'user': 2, 'rating': 10}, {'user': 1, 'rating': 20}, {'user': 3, 'rating': 10} ],
    [ {'user': 4, 'rating': 4}, {'user': 2, 'rating': 80}, {'user': 1, 'rating': 20}, {'user': 1, 'rating': 10} ],
]

预期输出

op = [
    [ {'user': 1, 'rating': 20}, {'user': 2, 'rating': 10}, {'user': 3, 'rating': 10} ],
    [ {'user': 4, 'rating': 4}, {'user': 2, 'rating': 80}, {'user': 1, 'rating': 30}, ],
]

解决方案代码

我们可以用Python的字典来临时存储每个用户的评分累加值,然后再转换成目标格式的列表,代码如下:

def aggregate_ratings(nested_data):
    result = []
    # 遍历外层的每个子列表
    for sublist in nested_data:
        user_ratings = {}
        # 遍历子列表里的每个字典条目
        for item in sublist:
            user_id = item['user']
            rating = item['rating']
            # 累加评分:如果用户已存在就加,不存在就初始化
            if user_id in user_ratings:
                user_ratings[user_id] += rating
            else:
                user_ratings[user_id] = rating
        # 把累加后的字典转换成要求的列表格式
        aggregated_sublist = [{'user': u, 'rating': r} for u, r in user_ratings.items()]
        result.append(aggregated_sublist)
    return result

# 测试一下
op = aggregate_ratings(data)
print(op)

代码解释

  • 首先定义一个函数aggregate_ratings接收嵌套数据作为参数;
  • 外层循环处理每个子列表,用user_ratings字典临时存储每个用户的总评分;
  • 内层循环遍历子列表中的每个条目,根据user键判断是否已存在,存在则累加评分,不存在则初始化;
  • 最后把临时字典转换成{'user': ..., 'rating': ...}格式的列表,添加到结果中。

这个方法逻辑清晰,时间复杂度是O(N)(N是所有字典条目的总数),处理效率也不错。

内容的提问来源于stack exchange,提问作者rahul.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:38:12