Python 3.4-如何获取字典值的平均值? [关闭]

问题描述 投票:0回答:3

我有以下字典:

StudentGrades = {
    'Ivan': [4.32, 3, 2],
    'Martin': [3.45, 5, 6],
    'Stoyan': [2, 5.67, 4],
    'Vladimir': [5.63, 4.67, 6]
}

我想创建一个打印学生平均成绩的函数,即数值的平均值,但是我不知道如何。你能帮我吗?

python python-3.x dictionary average
3个回答
11
投票

此答案用于Python2,即now dead

好,让我们遍历所有字典键并取平均项目:

avgDict = {}
for k,v in StudentGrades.iteritems():
    # v is the list of grades for student k
    avgDict[k] = sum(v)/ float(len(v))

在Python3中,不再需要iteritems()方法,可以直接使用items()

现在您可以看到:

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)))

尽管要小心:字典中项目的顺序是不保证;这就是说,不能保证在字典上打印或迭代时键/值的顺序(因为字典是“未排序的”)。不过,保证在相同的相同字典对象(无添加/删除)上循环两次是相同的。


1
投票

如果您不想进行简单的计算,请使用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)))

0
投票
from scipy import mean
map(lambda x: mean(StudentGrades[x]), StudentGrades)

生成此输出:

[3.1066666666666669,
 3.8900000000000001,
 5.4333333333333336,
 4.8166666666666664]

如果您喜欢非科学的解决方案,则可以像Jiby那样使用sumlen

map(lambda x: sum(StudentGrades[x])/len(StudentGrades[x]), StudentGrades)

EDIT:非常抱歉,我忘记了您想要Python 3.4解决方案,因此(例如,因为您将返回地图对象),您需要例如附加的list命令:

from scipy import mean
list(map(lambda x: mean(StudentGrades[x]), StudentGrades))

这将返回所需的输出。

© www.soinside.com 2019 - 2024. All rights reserved.