python - 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}
我得到一个内存不足的错误,现在我想起来了,这是有道理的。
那么,我怎样才能以一种也能处理那些更大的数据集的方式来构造上述函数呢?谢谢你的时间。
解决方案
您不需要创建列表,只需保留两个运行变量,一个保存总和,另一个保存元素数量:
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
推荐阅读
- python - 服务器-客户端聊天程序(Python 套接字)
- c++ - 从 const char arr[] 转换为 char **
- c# - 具有语音命令功能的 IEnumerator
- javascript - 你如何制作一个机器人,它可以对任何提及带有句子列表的特定字符串做出反应?
- react-native - java.lang.RuntimeException:获取未知参数类:将 JS 数组传递给 java 时的 int[]
- javascript - 使用 jquery 填充动态下拉列表
- ruby - extconf.rb:10:in `
': `gem install nokogiri -v '1.5.0' 时未初始化的常量配置(NameError) - google-sheets - 如果第 3 列中有相同的链接,但第 2 列中的其中一个是 PSTP,则列表中不应出现任何链接
- variables - 想要动态更改 SAS 中的变量名
- docker - docker 入口点脚本无法运行