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

Python中如何访问嵌套列表字典并实现加权平均计算?

解决嵌套列表字典的加权平均计算问题

你遇到的TypeError核心原因是:直接对字典items()返回的键值对元组执行乘法操作,而没有深入到嵌套列表的单个数值层级进行运算。要完成每个时间步的加权平均计算,需要逐层遍历嵌套列表,将对应位置的平均值和面积相乘后累加,再除以总面积。

假设数据结构示例

先明确典型的字典嵌套列表结构(方便后续代码对应):

avg_out = {
    "time_step_1": [[1.2, 3.4], [5.6]],
    "time_step_2": [[2.3, 4.5], [6.7, 8.9]]
}
area_out = {
    "time_step_1": [[10, 20], [30]],
    "time_step_2": [[15, 25], [35, 45]]
}

固定层级嵌套的解决方案

如果你的嵌套列表层级固定(比如两层),可以用多层zip逐层遍历:

# 存储每个时间步的最终计算结果
final_avg = {}

# 遍历每个时间步(确保两个字典的时间步键完全匹配)
for step in avg_out:
    avg_data = avg_out[step]
    area_data = area_out[step]
    
    weighted_total = 0.0
    total_area = 0.0
    
    # 遍历外层列表(如不同区域组)
    for avg_sub, area_sub in zip(avg_data, area_data):
        # 遍历内层列表(单个区域的数值点)
        for avg_val, area_val in zip(avg_sub, area_sub):
            weighted_total += avg_val * area_val
            total_area += area_val
    
    # 计算最终平均值,避免除以0的异常
    final_avg[step] = weighted_total / total_area if total_area != 0 else 0.0

print(final_avg)

任意深度嵌套的解决方案

如果嵌套列表的层级不固定,可以用递归函数处理任意深度的结构:

def calculate_weighted_sum(avg_nested, area_nested):
    weighted_sum = 0.0
    total_area = 0.0
    
    for avg_item, area_item in zip(avg_nested, area_nested):
        if isinstance(avg_item, list) and isinstance(area_item, list):
            # 递归处理更深层级的嵌套
            sub_sum, sub_area = calculate_weighted_sum(avg_item, area_item)
            weighted_sum += sub_sum
            total_area += sub_area
        else:
            weighted_sum += avg_item * area_item
            total_area += area_item
    
    return weighted_sum, total_area

# 执行计算
final_avg = {}
for step in avg_out:
    ws, ta = calculate_weighted_sum(avg_out[step], area_out[step])
    final_avg[step] = ws / ta if ta != 0 else 0.0

print(final_avg)

关键注意点

  • 必须确保两个字典的时间步键完全一致,否则会出现数据不匹配的问题
  • 加入除以0的判断,避免运行时抛出ZeroDivisionError
  • 多层嵌套必须逐层对应遍历,不能直接对整个列表做乘法运算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:01:18