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

Python 3.4-如何获得字典值的平均值?,python,python-3.x,dictionary,average,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] } 我想做一个函数,打印学生成绩的平均值,也就是平均值,但我不知道怎么做。你能帮我吗 from scipy import mean map(lambda x: mean(StudentGrades[x]), Stude

我有以下字典:

StudentGrades = {
    'Ivan': [4.32, 3, 2],
    'Martin': [3.45, 5, 6],
    'Stoyan': [2, 5.67, 4],
    'Vladimir': [5.63, 4.67, 6]
}
我想做一个函数,打印学生成绩的平均值,也就是平均值,但我不知道怎么做。你能帮我吗

from scipy import mean
map(lambda x: mean(StudentGrades[x]), StudentGrades)
生成此输出:

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

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))
这将返回所需的输出

生成此输出:

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

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))
这将返回所需的输出

这个答案是针对Python2的,它是

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

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}

从你的问题来看,我认为你对dicts上的迭代感到不安,所以这里的输出也是一样的:

avgList = []
for k,v in StudentGrades.iteritems():
    # v is the list of grades for student k
    avgDict.append(sum(v)/ float(len(v)))
但要小心:字典中项目的顺序不能保证;也就是说,无法保证在字典上打印或迭代时键/值的顺序(因为dict是“未排序的”)。 但是,在同一个相同的dictionary对象上循环两次(没有添加/删除)可以保证行为相同

这个答案是针对Python2的,它是

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

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}

从你的问题来看,我认为你对dicts上的迭代感到不安,所以这里的输出也是一样的:

avgList = []
for k,v in StudentGrades.iteritems():
    # v is the list of grades for student k
    avgDict.append(sum(v)/ float(len(v)))
但要小心:字典中项目的顺序不能保证;也就是说,无法保证在字典上打印或迭代时键/值的顺序(因为dict是“未排序的”)。
在同一个相同的字典对象上循环两次(没有添加/删除)可以保证行为相同。

如果不想进行简单计算,请使用统计信息。平均值:

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

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

访问每个键的值,求和,除以项数,然后打印结果。你知道如何循环字典中匹配的键和值吗?你知道如何对一份清单取平均值吗?你知道怎么打印东西吗?这些问题中的每一个都已经被问过并回答过很多次了。通过将它们结合起来,你可以做你需要做的事情——如果你仍然有问题,你的问题可以变得非常具体。你到底需要什么?平均字典值/s或字典的平均值或键中每个值元素的平均值???访问每个键的值,求和,除以项数,然后打印结果。您知道如何循环字典中匹配的键和值吗?你知道如何对一份清单取平均值吗?你知道怎么打印东西吗?这些问题中的每一个都已经被问过并回答过很多次了。通过将它们结合起来,你可以做你需要做的事情——如果你仍然有问题,你的问题可以变得非常具体。你到底需要什么?平均字典值/s或字典的平均值或键中每个值元素的平均值???很好的一行代码,但是为一个简单的dict加载scipy^^是的,如果你真的只需要这一种方法,加载整个scipy可能不是那么好…但是正如我的编辑所示,你可以加载只是意味着…我不认为这会是一个问题。真的^^。另外:元素的顺序取决于字典如何迭代(这取决于实现)Nice oneliner,但如何为简单dict加载scipy^^是的,如果你真的只需要这一种方法,加载整个scipy可能不是那么好…但是正如我的编辑所示,你可以加载只是意味着…我不认为这会是一个问题。真的^^。另外:元素的顺序取决于字典的迭代方式(依赖于实现)