截至目前我的字典是这样的:
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].........
我怎样才能这样做,即使分数更新,平均值也会随之更新。还有一种方法可以找到分数中的最高分
答案 0 :(得分:3)
尝试这样:
class_1_average = {key: sum(value)/len(value) for key, value in class_1.items()}
对于最大值:您可以使用max内置函数而不是字典值
max_each = {key: max(value) for key, value in class_1.items()}
答案 1 :(得分:1)
您可以在生成器表达式中使用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}
答案 2 :(得分:0)
如果您需要实时更新“平均值”,我会想到一件事(尽管可能用核武器杀死苍蝇而不是真的是你need)将创建一个继承自内置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的answer。< / p>