计算字典中值的平均值

working out an average of the values in a dictionary

我现在的字典是这样的:

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 ={'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_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()}

如果你需要更新你的平均值,你会想到一件事"in real time"(尽管可能用核武器杀死苍蝇 而不是你真正需要的)将创建一个自定义 class 继承自内置 dict 类型并使用 averages 方法扩展它:

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 的 .