如何按公共键值对汇总嵌套列表字典中的重复元素值?
汇总嵌套列表字典中相同用户的评分值
假设你有一个嵌套结构的列表(列表套列表套字典),需要把每个子列表里相同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
相关产品推荐
相关产品推荐

