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

Python计算字典列表指定值的平均值触发TypeError错误如何解决

问题原因
  • numbers_lists 结构定义错误:你写的[Bob['assignments'], ...], [Geoff['assignments'], ...] 没有外层列表包裹,实际生成的是包含2个列表元素的元组,不是一维数值列表。sum()函数默认从初始值0(int类型)开始累加,第一次就尝试把int和list相加,直接触发你遇到的TypeError。
  • 第二个子列表混入非数值元素:你在Geoff的成绩列表中多余添加了"\n"字符串,就算你把嵌套结构拉平,这个字符串也会导致后续求和时再次触发类型错误。
解决方法

如果你需要计算所有学生所有科目的总平均分,修正代码如下:

Bob = {'name': 'bob', 'assignments': 80.0, 'presentation': 80.0, 'lab tasks': 60.0}
Geoff = {'name': 'Geoff', 'assignments': 90.0, 'presentation': 90.0, 'lab tasks': 90.0}
# 构造一维数值列表,仅保留所有有效成绩数值
numbers_lists = [
    Bob['assignments'], Bob['presentation'], Bob['lab tasks'],
    Geoff['assignments'], Geoff['presentation'], Geoff['lab tasks']
]
all_students_avg = sum(numbers_lists) / len(numbers_lists)
print("This is all the students average score across all subjects: ", all_students_avg)

运行后输出结果为81.66666666666667。

如果你需要的是先计算每个学生的个人平均分,再求所有学生的平均分,可以用如下实现:

Bob = {'name': 'bob', 'assignments': 80.0, 'presentation': 80.0, 'lab tasks': 60.0}
Geoff = {'name': 'Geoff', 'assignments': 90.0, 'presentation': 90.0, 'lab tasks': 90.0}
students = [Bob, Geoff]
# 先算每个学生的平均分,再求整体平均
student_avg_list = []
for stu in students:
    stu_scores = [stu['assignments'], stu['presentation'], stu['lab tasks']]
    student_avg_list.append(sum(stu_scores)/len(stu_scores))
all_students_avg = sum(student_avg_list)/len(student_avg_list)
print("This is the average of each student's overall score: ", all_students_avg)

运行后输出结果为83.33333333333333。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:54:03