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

Python for循环中如何计算各次迭代同键字典的键值平均值

多层循环下统计字典同键数值平均值的实现方案

实现思路

  • 在所有循环的最外层定义两个统计容器,分别存储每个键的数值累计总和、每个键的出现次数,禁止将容器定义在循环内部,避免每次迭代被重置。
  • 每次内层循环生成单条字典d后,遍历字典的所有键值对,将数值累加到总和容器的对应键下,同时给计数容器的对应键计数+1。
  • 所有循环执行完成后,遍历总和容器的每个键,用「累计总和 / 对应出现次数」计算平均值,整理为最终结果字典即可。

可直接复用的代码实现

原代码存在内层循环缩进错误,以下为修正后可直接运行的版本:

from collections import defaultdict

# 循环最外层初始化统计容器
sum_dict = defaultdict(float)  # 存储每个键的数值总和
count_dict = defaultdict(int)  # 存储每个键的出现次数

for i in range(len(oneImageTest)):
    m = 0
    for j in range(y):
        for k in range(x):
            d = {}
            m = m + 1
            d[class_name1] = predict1
            d[class_name2] = predict2
            # 其余键值对赋值逻辑保持原有写法不变

            # 累加当前字典的数值到统计容器
            for key, val in d.items():
                sum_dict[key] += val
                count_dict[key] += 1
            
            # 原有逐次打印逻辑可按需保留
            # print(i, d)

# 循环全部结束后计算平均值
avg_result = {}
for key in sum_dict:
    avg_result[key] = round(sum_dict[key] / count_dict[key], 2)  # 保留2位小数和示例格式对齐

print(avg_result)

可选调整方案

  • 如果不想引入collections.defaultdict,可以用普通字典实现相同逻辑,累加部分替换为如下代码即可:
sum_dict = {}
count_dict = {}
for key, val in d.items():
    if key not in sum_dict:
        sum_dict[key] = 0.0
        count_dict[key] = 0
    sum_dict[key] += val
    count_dict[key] += 1
  • round()函数的第二个参数为保留小数位数,可以根据实际精度需求自行调整。
  • 该逻辑天然兼容「部分键仅在少数循环中出现」的场景,比如示例中仅出现1次的5498B_C_E_1,会自动按出现1次计算平均值,和预期输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:54:23