查找字典中特定值的平均值

时间:2016-04-24 09:13:47

标签: python dictionary average

我有一本看起来像这样的字典。 。

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'

2 个答案:

答案 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来强制执行此行为。