You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python大字典中列表的元素级高效求平均方法

高效实现大字典中列表的元素级平均

给定如下结构的大Python字典(每个值为等长列表):

my_dict = {
    "a": [2,5,3],
    "b": [1,0,2],
    "c": [5,2,5]
}

需要计算所有列表对应索引元素的平均值,期望输出为 [2.6 2.3 3.3]。由于字典规模极大,嵌套循环的朴素方法效率不足,以下是更高效的实现方案:

核心方案:利用NumPy向量化运算

NumPy的底层基于C实现,能避免Python循环的额外开销,是处理大规模数值运算的最优选择,具体实现步骤如下:

  1. 将字典中的所有列表转换为二维NumPy数组
  2. 对数组按列计算平均值(对应原列表的索引位置)

代码示例:

import numpy as np

my_dict = {
    "a": [2,5,3],
    "b": [1,0,2],
    "c": [5,2,5]
}

# 将字典值转为二维数组,每行对应原字典中的一个列表
arr = np.array(list(my_dict.values()))
# axis=0表示沿行方向计算,即求每列的均值(对应原列表的索引元素)
avg = arr.mean(axis=0)

print(avg)  # 输出: [2.66666667 2.33333333 3.33333333]

效率优势说明

  • 完全规避Python层面的嵌套循环,所有计算在NumPy的底层C代码中完成,大幅降低循环开销
  • NumPy数组采用连续内存块存储,比Python列表的分散存储更适合大规模数值运算
  • 内置的mean方法经过高度优化,比手动累加再除法的实现更高效

内存受限场景的优化方案

如果字典规模过大,无法一次性将所有列表加载为二维数组,可采用分块累加的方式,避免内存溢出:

import numpy as np

my_dict = {
    "a": [2,5,3],
    "b": [1,0,2],
    "c": [5,2,5]
}

# 初始化累加数组和计数
list_len = len(next(iter(my_dict.values())))
total = np.zeros(list_len, dtype=np.float64)
count = 0

for lst in my_dict.values():
    total += np.array(lst)
    count += 1

avg = total / count
print(avg)

该方法无需一次性加载所有数据,适合内存有限的场景,效率仍远优于纯Python循环。

内容的提问来源于stack exchange,提问作者bart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:35:06