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

如何计算嵌套字典中所有未被masked的云底高度值的平均值?

如何计算嵌套字典中所有未被masked的云底高度值的平均值?

嘿,我来帮你搞定这个问题!你之前的尝试踩了两个关键小坑,咱们先理清楚问题,再一步步解决:

你之前出错的原因

  1. 变量引用错误:第一个尝试里循环date in obs时直接用了obs_day,但这个变量是你之前读取文件时的局部变量,到这一步已经变成字符串类型了,自然会报'str' object has no attribute 'values'的错误。
  2. masked值判断逻辑错误:你用v != "masked"来过滤无效值,但实际上你的masked是numpy的np.ma.masked对象,不是字符串,这种判断完全不会生效,导致过滤后可能没有有效数据,触发mean requires at least one data point的错误。

正确解决方案:计算整个月的平均云高

我们需要先遍历整个嵌套字典,把所有未被masked的云高值收集到一个列表里,再计算平均值,这样既避免了按天计算可能出现的无数据情况,也能直接得到整个月的平均:

import numpy as np

# 初始化空列表,存储所有有效的云底高度
all_valid_heights = []

# 遍历外层字典的每个日期和对应的小时数据
for date, hourly_data in obs.items():
    # 遍历当天每个小时的云高值
    for height in hourly_data.values():
        # 用numpy专用方法判断是否未被masked
        if not np.ma.is_masked(height):
            all_valid_heights.append(height)

# 计算并输出结果,先判断列表不为空避免报错
if all_valid_heights:
    monthly_average = np.mean(all_valid_heights)
    print(f"2019年10月的平均云底高度为:{monthly_average}")
else:
    print("没有找到任何有效的云底高度数据")

额外需求:按天计算每天的平均云高

如果你还需要单独统计每天的平均云高(忽略当天的masked值),可以用下面的代码:

import numpy as np

daily_averages = {}

for date, hourly_data in obs.items():
    # 收集当天所有未被masked的数值
    daily_valid = [h for h in hourly_data.values() if not np.ma.is_masked(h)]
    if daily_valid:
        daily_averages[date] = np.mean(daily_valid)
    else:
        # 如果当天全是masked,标记为masked或者自定义提示
        daily_averages[date] = np.ma.masked

# 输出每天的结果
for date, avg in daily_averages.items():
    print(f"日期 {date} 的平均云底高度:{avg}")

备注:内容来源于stack exchange,提问作者lkdedrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:05:29