You need to enable JavaScript to run this app. Python从列表提取值构建指定键序嵌套字典 按学生维度分组归集成绩
优惠活动
大模型
产品
解决方案
定价
更多

Python从列表提取值构建指定键序嵌套字典 按学生维度分组归集成绩

实现方案

Python 3.7+ 默认字典为插入有序结构,无需额外排序即可匹配要求的键顺序,核心通过分组映射完成成绩归集。

实现逻辑

  • 拆分每条原始字符串为基础信息、成绩两类字段
  • 以 (first-name, last-name, class, roll-number) 元组作为学生唯一标识,维护分组映射字典:
    • 首次识别到某学生时,按指定键顺序构造学生基础字典,初始化空 marks 列表
    • 后续匹配到同一学生的成绩记录时,按指定顺序构造成绩条目,追加到对应 marks 列表
  • 最终提取分组字典的所有值,即为目标嵌套列表

可运行代码

input_strings = [
    'abc-bcd_10_01_physics_90_70_20',
    'abc-bcd_10_01_chemistry_85_75_10',
    'ac-bd_10_03_biology_60_50_10',
    'ad-bcd_10_05_physics_70_50_20',
    'ac-bd_10_03_physics_65_50_15'
]

grouped = {}
for s in input_strings:
    seg = s.split('_')
    # 提取基础字段
    first_name, last_name = seg[0].split('-')
    class_val = seg[1]
    roll_num = int(seg[2])
    # 提取成绩字段
    subject = seg[3]
    total = int(seg[4])
    theory = int(seg[5])
    practical = int(seg[6])
    
    # 构造学生唯一键
    key = (first_name, last_name, class_val, roll_num)
    # 首次出现则初始化基础结构
    if key not in grouped:
        grouped[key] = {
            'first-name': first_name,
            'last-name': last_name,
            'class': class_val,
            'roll-number': roll_num,
            'marks': []
        }
    # 追加成绩条目
    grouped[key]['marks'].append({
        'subject': subject,
        'total': total,
        'theory': theory,
        'practical': practical
    })

# 最终结果
output = list(grouped.values())

注意点

  • 所有字典构造时严格按照示例的键顺序写入,完全匹配预期的键排列要求
  • 学号、各类分数自动转为整数类型,和示例输出的类型保持一致
  • 原始字符串的遍历顺序和示例输入一致时,最终输出的学生顺序也和示例完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.14 03:06:08