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

如何为字典列表中指定rollno的字典的total_marks累加科目分数

实现方案

你原有的写法行不通的原因:students是列表类型,索引只能是下标位置,不能直接用rollno作为索引取值,建议先将列表转换为以rollno为键的映射字典,查找匹配的效率更高,实现逻辑如下:


步骤1:将学生列表转换为rollno映射字典

首先修正原学生列表的语法(Python字典的字符串键需要加引号),再做格式转换:

students = [
    {"rollno":1, "firstname":"f1", "last_name":"l1", "total_marks":0},
    {"rollno":2, "firstname":"f2", "last_name":"l2", "total_marks":0},
    {"rollno":3, "firstname":"f3", "last_name":"l3", "total_marks":0}
]

# 转换为rollno为key的字典,后续查找效率为O(1)
student_map = {stu["rollno"]: stu for stu in students}

步骤2:解析输入并累加分数

假设你的marks_list里每个元素是如rollno:1 english_marks:10格式的字符串,解析累加逻辑如下:

for marks_entry in marks_list:
    # 拆分键值对,去除多余空格
    parts = [p.strip() for p in marks_entry.split() if p.strip()]
    entry_data = {}
    for part in parts:
        k, v = part.split(":", 1) # 只按第一个冒号拆分,避免值里有冒号导致解析出错
        entry_data[k.strip()] = v.strip()
    
    # 提取当前记录的rollno和科目分数
    current_roll = int(entry_data["rollno"])
    # 科目key不固定,取非rollno的键对应的值即可
    mark_val = int([v for k,v in entry_data.items() if k != "rollno"][0])

    # 匹配rollno并累加分数
    if current_roll in student_map:
        student_map[current_roll]["total_marks"] += mark_val
    else:
        # 若需要新增不存在的rollno对应的学生记录,可取消下方注释
        # student_map[current_roll] = {"rollno": current_roll, "total_marks": mark_val}
        # 不需要新增的话直接跳过即可
        pass

步骤3:(可选)回写为原列表格式

如果你之后仍需要保持原来的列表结构,可直接转换回去:

students = list(student_map.values())

效果验证

你给出的测试输入处理完成后,rollno为1的学生total_marks为40,rollno为2的学生total_marks为60,符合累加要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:01