我有以下的解释:Python 3.4 - 如何获得字典值的平均值?
StudentGrades = {
'Ivan': [4.32, 3, 2],
'Martin': [3.45, 5, 6],
'Stoyan': [2, 5.67, 4],
'Vladimir': [5.63, 4.67, 6]
}
我想打一个打印学生成绩的平均值的函数,即值的平均值,但我不知道怎么样。你能帮我吗?
我有以下的解释:Python 3.4 - 如何获得字典值的平均值?
StudentGrades = {
'Ivan': [4.32, 3, 2],
'Martin': [3.45, 5, 6],
'Stoyan': [2, 5.67, 4],
'Vladimir': [5.63, 4.67, 6]
}
我想打一个打印学生成绩的平均值的函数,即值的平均值,但我不知道怎么样。你能帮我吗?
好了,让我们遍历所有字典键和平均项目:
avgDict = {}
for k,v in StudentGrades.iteritems():
# v is the list of grades for student k
avgDict[k] = sum(v)/ float(len(v))
现在你可以看到:
avgDict
Out[5]:
{'Ivan': 3.106666666666667,
'Martin': 4.816666666666666,
'Stoyan': 3.89,
'Vladimir': 5.433333333333334}
从你的问题我觉得你很想吐关于迭代字典,所以这里的输出和列表一样:
avgList = []
for k,v in StudentGrades.iteritems():
# v is the list of grades for student k
avgDict.append(sum(v)/ float(len(v)))
但要小心:字典中的项目顺序是不保证;这是,在字典上打印或迭代时键/值的顺序不能保证(因为字典是“未排序的”)。 尽管循环遍历相同的相同字典对象(不带添加/删除)两次,但保证其行为相同。
from scipy import mean
map(lambda x: mean(StudentGrades[x]), StudentGrades)
生成的输出:
[3.1066666666666669,
3.8900000000000001,
5.4333333333333336,
4.8166666666666664]
如果你喜欢一个非SciPy的解决方案一个可以使用sum
和len
像应该由Jiby:
map(lambda x: sum(StudentGrades[x])/len(StudentGrades[x]), StudentGrades)
编辑:我非常抱歉,我忘了你想要一个Python 3.4解决方案,因此(因为你会得到一个地图对象返回),你需要的,例如附加列表命令:
from scipy import mean
list(map(lambda x: mean(StudentGrades[x]), StudentGrades))
这将返回所需的输出。
如果你不想做简单的计算使用statistics.mean:
from statistics import mean
StudentGrades = {
'Ivan': [4.32, 3, 2],
'Martin': [3.45, 5, 6],
'Stoyan': [2, 5.67, 4],
'Vladimir': [5.63, 4.67, 6]
}
for st,vals in StudentGrades.items():
print("Average for {} is {}".format(st,mean(vals)))
你尝试过什么了吗? – IanAuld
访问每个键的值,将其相加除以项目数,然后打印结果。 – MattDMo
你知道如何遍历字典中的匹配键和值吗?你知道如何取平均值吗?你知道如何打印一些东西吗?这些问题中的每一个都在SO上多次提出并回答。通过结合他们,你可以做你需要的东西 - 如果你仍然有问题,你的问题可以变得非常具体和具体。 – DSM