我有一本看起来像这样的字典。 。
students_marks = {"barry": [20,25,30], "fred": [12,14,16], "sarah": [32,30,28]
依此类推,我可以在字典中添加更多带值的键。 值是每个作业的标记
我正在尝试获得第一次作业中所有学生的平均成绩 例如。巴里 - 20,弗雷德 - 12,莎拉 - 32
到目前为止这是我的代码
students_marks = {"barry": [20,25,30], "fred": [12,14,16], "sarah": [32,30,28]}
def get_below_average_df_report_marks_report():
sum(float(x[0] for x in students_marks.values())/len(students_marks))
我收到错误:TypeError:float()参数必须是字符串或数字,而不是'generator'
答案 0 :(得分:1)
问题是你在计算总和之前尝试强制浮动,它应该是float(sum...
而不是sum(float...
。
>>> float(sum(x[0] for x in students_marks.values()))/len(students_marks)
21.333333333333332
就可读性而言,我更喜欢这个解决方案:
>>> from operator import itemgetter
>>> first_score = itemgetter(0)
>>> num_students = float(len(students_marks))
>>> sum(map(first_score, students_marks.values()))/num_students
21.333333333333332
如果您更喜欢没有import语句的解决方案,那么这个方法就等同于:
>>> first_score = lambda scores: scores[0]
>>> num_students = float(len(students_marks))
>>> sum(map(first_score, students_marks.values()))/num_students
21.333333333333332
请注意,如果您使用的是Python 3,则不需要使用浮动转换,因为/
运算符默认情况下已执行浮点除法。
答案 1 :(得分:0)
您的浮动演员已经过时了:
def get_below_average_df_report_marks_report():
sum((x[0] for x in students_marks.values())/len(students_marks)
您试图将生成器对象x[0] for x in students_marks.values()
转换为浮点数,这是不可能的,并导致您的错误。
请注意,在Python 3中,您不必先将值转换为float。分部总是返回一个浮点数。在python 2中,您可以使用from __future__ import division
来强制执行此行为。