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可能不是那么好…但是正如我的编辑所示,你可以加载只是意味着…我不认为这会是一个问题。真的^^。另外:元素的顺序取决于字典的迭代方式(依赖于实现)