如何合并Python嵌套列表并去重,同时累加同学生同科目分数?
解决Python嵌套列表中同一学生同一科目分数累加问题
给定如下嵌套列表(元素依次为学生姓名、考试分数、科目):
student_scores = [['jake', '100', 'science'], ['sam', '200', 'math'], ['jake', '100', 'science'], ['sam', '200', 'science']]
我们需要实现的效果是:同一学生同一科目的分数累加,去除重复项,最终输出:
[['jake', '200', 'science'], ['sam', '200', 'math'], ['sam', '200', 'science']]
实现思路
用字典做分组统计:以**(姓名, 科目)**作为唯一标识键,对应的值存储该组合的总分。遍历原列表时更新字典中的总分,最后将字典转换为目标格式的嵌套列表。
完整代码
# 原列表,避免用list作为变量名(覆盖内置类型) student_scores = [['jake', '100', 'science'], ['sam', '200', 'math'], ['jake', '100', 'science'], ['sam', '200', 'science']] # 初始化字典用于统计总分 score_dict = {} for name, score_str, subject in student_scores: # 把分数字符串转成整数以便累加 score = int(score_str) # 用(姓名, 科目)作为唯一键 key = (name, subject) if key in score_dict: # 已有记录则累加分数 score_dict[key] += score else: # 无记录则初始化总分 score_dict[key] = score # 把字典转换为目标格式的嵌套列表 result = [[name, str(total_score), subject] for (name, subject), total_score in score_dict.items()] print(result)
代码说明
- 遍历过程中需将分数从字符串转为整数,才能进行数值累加计算
- 元组
(name, subject)作为字典键,确保每个学生+科目组合唯一 - 最后通过列表推导式,将字典的键值对转换回要求的字符串分数格式嵌套列表
内容的提问来源于stack exchange,提问作者Alicia Whilde
相关产品推荐
相关产品推荐

