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

如何计算M1和E1平均分并向现有字典添加键值对、修改输出?

问题描述

需要为gradebook字典中2002、2008条目下的每个姓名计算M1和E1分数的平均分,添加键值对average: (M1+E1)/2,同时想了解如何在这两个条目下添加更多键值对。现有代码、当前输出及期望输出如下:

现有代码

gradebook = {
    2002: [
        {"Name" : "John"},
        {"M1" : 87},
        {"E1" : 10},
        {"Score" : 90},
        {"Grade" : "A"}
        ],
    2008 : [
        {"Name" : "Paul"},
        {"M1" : 83},
        {"E1" : 59},
        {"Score" : 77},
        {"Grade" : "C"}
        ],
}
def displayResult(gradebook):
    print('ID       Name        Grade')
    for i,j in gradebook.items():
        print('{}       {}       {}'.format(i,j[0]['Name'],j[4]['Grade']))
    

displayResult(gradebook)

当前输出

ID       Name        Grade
2002       John       A
2008       Paul       C

期望输出

ID       Name        Average
2002       John       48.5
2008       Paul       71  

解决方案

1. 计算并添加平均分

原数据结构中,每个年份对应一个字典列表,每个小字典仅存单个键值对。要计算平均分,遍历每个年份条目,提取M1和E1的值,计算后将{"Average": 平均分}添加到对应列表:

for year, entries in gradebook.items():
    # 提取M1和E1的值
    m1 = next(item["M1"] for item in entries if "M1" in item)
    e1 = next(item["E1"] for item in entries if "E1" in item)
    # 计算平均分
    average = (m1 + e1) / 2
    # 添加到条目列表
    entries.append({"Average": average})

2. 修改显示函数以匹配期望输出

调整displayResult函数的表头和输出内容,改为展示ID、姓名和平均分:

def displayResult(gradebook):
    print('ID       Name        Average')
    for year, entries in gradebook.items():
        name = next(item["Name"] for item in entries if "Name" in item)
        average = next(item["Average"] for item in entries if "Average" in item)
        # 格式化输出:整数平均分显示为整数,小数保留原样
        display_avg = int(average) if average.is_integer() else average
        print('{}       {}       {}'.format(year, name, display_avg))

3. 完整可运行代码

整合后的完整代码如下:

gradebook = {
    2002: [
        {"Name" : "John"},
        {"M1" : 87},
        {"E1" : 10},
        {"Score" : 90},
        {"Grade" : "A"}
        ],
    2008 : [
        {"Name" : "Paul"},
        {"M1" : 83},
        {"E1" : 59},
        {"Score" : 77},
        {"Grade" : "C"}
        ],
}

# 计算并添加平均分
for year, entries in gradebook.items():
    m1 = next(item["M1"] for item in entries if "M1" in item)
    e1 = next(item["E1"] for item in entries if "E1" in item)
    average = (m1 + e1) / 2
    entries.append({"Average": average})

def displayResult(gradebook):
    print('ID       Name        Average')
    for year, entries in gradebook.items():
        name = next(item["Name"] for item in entries if "Name" in item)
        average = next(item["Average"] for item in entries if "Average" in item)
        display_avg = int(average) if average.is_integer() else average
        print('{}       {}       {}'.format(year, name, display_avg))

displayResult(gradebook)

4. 添加更多键值对的方法

方法1:基于现有列表结构添加

直接使用列表append()方法,给目标年份的条目列表添加新的键值对字典:

# 给2002年添加出勤记录
gradebook[2002].append({"Attendance": 95})

方法2:优化数据结构(更推荐)

原列表式结构维护不便,建议将每个年份的条目改为单一字典,后续添加或修改键值对会更简单:

# 优化后的数据结构
gradebook = {
    2002: {
        "Name": "John",
        "M1": 87,
        "E1": 10,
        "Score": 90,
        "Grade": "A"
    },
    2008: {
        "Name": "Paul",
        "M1": 83,
        "E1": 59,
        "Score": 77,
        "Grade": "C"
    }
}

# 添加平均分
gradebook[2002]["Average"] = (gradebook[2002]["M1"] + gradebook[2002]["E1"]) / 2
# 添加新键值对
gradebook[2008]["Attendance"] = 92

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:55:19