首页 > 解决方案 > Python根据dict值获取dict键的加权平均值

问题描述

我正在尝试编写代码来查找我的字典中键的平均值,但基于字典值。因此,例如,对于:

d = {1:2, 2:1, 3:2}

dict键是:

[1,1,2,3,3]

我编写了以下代码,适用于上述小型数据集:

def get_median_of_dict_keys(d: dict) -> float:
    nums_list = []
    for k,v in d.items():
        if type(v) != int:
            raise TypeError
        nums_list.extend([k] * v)
    
    median = sum(nums_list) / len(nums_list)
    return median

当数据集很小时,这可以让我得到我想要的值,但是如果数据集类似于:

d = {1:1_000_000_000_000_000, 2:2_000, 3:1_000_000_000_000_000}

我得到一个内存不足的错误,现在我想起来了,这是有道理的。

那么,我怎样才能以一种也能处理那些更大的数据集的方式来构造上述函数呢?谢谢你的时间。

标签: pythondictionarykeymeanweighted-average

解决方案


您不需要创建列表,只需保留两个运行变量,一个保存总和,另一个保存元素数量:

def get_mean_of_dict_keys(d: dict) -> float:
    total = 0
    count = 0
    for k, v in d.items():
        total += k * v
        count += v

    mean = total / count
    return mean


print(get_mean_of_dict_keys({1: 2, 2: 1, 3: 2}))

输出

2.0

推荐阅读