Python 3.4 - 如何获得字典值的平均值?

时间:2015-06-06 20:25:37

标签: python python-3.x dictionary average

我有以下字典:

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

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

3 个答案:

答案 0 :(得分:8)

好的,让我们迭代所有字典键并平均项目:

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

但请注意:字典中的项目顺序不保证;也就是说,不保证在字典上打印或迭代时键/值的顺序(因为词语是“未排序的”)。 两次相同的字典对象(没有添加/删除)循环,但保证行为相同。

答案 1 :(得分: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)))

答案 2 :(得分:0)

[WebMethod]

生成此输出:

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

如果您更喜欢非scipy解决方案,可以使用Jiby所假设的[3.1066666666666669, 3.8900000000000001, 5.4333333333333336, 4.8166666666666664] sum

len

编辑:我非常抱歉,我忘了你想要一个Python 3.4解决方案,因此(因为你会得到一个地图对象返回)你需要,例如,一个额外的列表命令:

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

这将返回所需的输出。