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
相关产品推荐
相关产品推荐

