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没有附带它,那么我如何从列表中的所有分数中找到最高值呢?我正在努力为每个单独的名称找到最大值,这样我就可以有另一本包含高分和名称的字典了