![](/img/trans.png)
[英]In python, how do I find the sum of values in a dictionary? Where each key has multiple values
[英]How do I calculate an average from averages in a dictionary with multiple values in each key without using sum()?
感谢在上一篇文章中帮助过我的人,我能够在字典中找到每个 class 的平均值,并使用以下代码打印出平均值:
def avg(classes):
average = {}
for classnames, grades in classes.items():
average[classnames] = sum(grades) / len(grades)
return average
classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]}
averages = avg(classes)
print("Average grades in each class:", averages)
average_of_averages = sum(averages.values())/len(averages)
print("Average of average grades:", average_of_averages)
我只是想知道是否有一种方法可以在不使用内置 function sum() 的情况下计算平均值(每个 class 的平均成绩和这些平均值的平均值合计)。
我在想我需要一个嵌套的 for 循环:一个循环用于每个 class 的平均值,然后另一个循环来查找这些平均值的平均值,但我不知道如何执行此操作,因为每个键中有多个值。
是的,您可以简单地添加第二个循环,如下所示:
def avg(classes):
average = {}
for classnames in classes:
total = 0
for grade in classes[classnames]:
total += grade
average[classnames] = total / len(classes[classnames])
return average
classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]}
averages = avg(classes)
print("Average grades in each class:", averages)
total_averages = 0
for classname in averages:
total_averages += averages[classname]
average_of_averages = total_averages / len(averages)
print("Average of average grades:", average_of_averages)
如果您愿意,您也可以完全跳过计算每个单独的 class 平均值的部分,并一次计算整个平均值,如下所示:
def avg(classes):
total = 0
total_length = 0
for classnames in classes:
for grade in classes[classnames]:
total += grade
total_length += len(classes[classnames])
return total / total_length
classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]}
average_of_averages = avg(classes)
print("Average of average grades:", average_of_averages)
您可以使用numpy.mean()
和 cast averages.values()
列出
import numpy as np
def avg(classes):
average = {}
for classnames, grades in classes.items():
average[classnames] = np.mean(grades)
return average
classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]}
averages = avg(classes)
print("Average grades in each class:", averages)
average_of_averages = np.mean(list(averages.values()))
print("Average of average grades:", average_of_averages)
为什么不使用pandas
代替它比使用循环更简单、更快。 这是您需要使用的代码:
import pandas as pd
classes = {"Spanish II": [100, 99, 100, 98], "US History I": [95, 96, 97, 94]}
df = pd.DataFrame(classes)
avg = df.mean()
avg_of_avg = avg.mean()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.