Python 计算字典中数值的平均值

Python 计算字典中数值的平均值,python,math,average,Python,Math,Average,我现在的字典是这样的: class_1 = {'Bob':[9,5,4,3,3,4], 'John':[5,5,7,3,6], 'Andy':[7,5,6,4,5], 'Harris':[3,4,2,3,2,3,2]} class_1_average = {key: sum(value)/len(value) for key, value in class_1.items()} 我想让它看起来像这样: class_1_average ={'Bob':[average of scores],'

我现在的字典是这样的:

class_1 = {'Bob':[9,5,4,3,3,4], 'John':[5,5,7,3,6], 'Andy':[7,5,6,4,5], 'Harris':[3,4,2,3,2,3,2]}
class_1_average = {key: sum(value)/len(value) for key, value in class_1.items()}
我想让它看起来像这样:

class_1_average ={'Bob':[average of scores],'John':[average of scores].........

我如何做到这一点,即使分数更新,平均值也会随之更新。还有一种方法可以从分数中找到最高的分数吗?你可以在生成器表达式中使用
numpy.mean
来获得每个学生的平均值。一般来说,您可以使用这个范例来获取其他统计数据

>>> from numpy import mean
>>> class_1 = {'Bob':[9,5,4,3,3,4], 'John':[5,5,7,3,6], 'Andy':[7,5,6,4,5], 'Harris':[3,4,2,3,2,3,2]}
>>> class_1_average = {name: mean(values) for name, values in class_1.items()}
>>> class_1_average
{'John': 5.2000000000000002, 'Harris': 2.7142857142857144, 'Andy': 5.4000000000000004, 'Bob': 4.666666666666667}
试着这样做:

class_1 = {'Bob':[9,5,4,3,3,4], 'John':[5,5,7,3,6], 'Andy':[7,5,6,4,5], 'Harris':[3,4,2,3,2,3,2]}
class_1_average = {key: sum(value)/len(value) for key, value in class_1.items()}
对于最大值:可以对字典的值使用最大内置函数

max_each = {key: max(value) for key, value in class_1.items()}

如果您需要“实时”更新平均值(虽然可能是用核武器杀死苍蝇,但这并不是您真正需要的),您会想到的一件事是创建一个自定义类,该类继承内置类型,并使用
平均值
方法对其进行扩展:

import pprint

class MyDict(dict):
    def averages(self):
        averages = {}
        for name, score_list in self.iteritems():
            averages[name] = sum(score_list) / len(score_list)
        return averages

if __name__ == "__main__":
    class_1 = MyDict({
        'Bob': [9, 5, 4, 3, 3, 4],
        'John': [5, 5, 7, 3, 6],
        'Andy': [7, 5, 6, 4, 5],
        'Harris': [3, 4, 2, 3, 2, 3, 2]
    })

    print "class_1: %s" % pprint.pformat(class_1)
    print "class_1_averages: %s" % pprint.pformat(class_1.averages())
    print "Bob's average: %s" % pprint.pformat(class_1.averages()['Bob'])
    print "Setting Bob's scores to [1, 1, 1]"
    class_1['Bob'] = [1, 1, 1]
    print "Bob's average: %s" % pprint.pformat(class_1.averages()['Bob'])
这将产生:

class_1: {'Andy': [7, 5, 6, 4, 5],
 'Bob': [9, 5, 4, 3, 3, 4],
 'Harris': [3, 4, 2, 3, 2, 3, 2],
 'John': [5, 5, 7, 3, 6]}
class_1_averages: {'Andy': 5, 'Bob': 4, 'Harris': 2, 'John': 5}
Bob's average: 4
Setting Bob's scores to [1, 1, 1]
Bob's average: 1

也许你可以利用这一点来了解Python允许你做什么(这并不一定意味着你应该这样做),你可能会更喜欢Hackaholic。

python3,如果这有帮助的话,下面的投票提醒我“汤纳粹”插曲…在Python3及以上版本中是numpy,因为我的插曲中说它的模块不在那里,您必须安装
numpy
,pythonal没有附带它,那么我如何从列表中的所有分数中找到最高值呢?我正在努力为每个单独的名称找到最大值,这样我就可以有另一本包含高分和名称的字典了