繁体   English   中英

如何在不使用 sum() 的情况下从每个键中有多个值的字典中的平均值计算平均值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM