查找字典中特定值的平均值
问题描述:
我有一本看起来像这样的字典。 。 。查找字典中特定值的平均值
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))
,我发现了错误:类型错误:浮置()参数必须是一个字符串或数字,不“发电机”
答
问题是,您正在试图在计算总和之前进行投射,应该是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,则不需要强制转换,因为/
运算符默认已经执行了浮点除法。
答
你浮投已经过时:
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中,您不必首先将值转换为浮点数。司总是返回一个浮点数。在Python 2中,您可以使用from __future__ import division
来强制执行此行为。