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

Python中嵌套字典内相同键对应值的平均值计算问题

解决嵌套字典中相同键值的平均值计算问题

嘿,我来帮你搞定这个问题——你遇到的AttributeError是因为没理清嵌套结构的层级:你的avg字典里,每个键(比如AKL)对应的值是一个列表,而不是字典,所以调用.items()肯定会报错,列表根本没这个方法。咱们一步步来修正,最终得到你想要的结果:

第一步:先把时间字符串转成可计算的数值

你现在的时间都是'19:30'这种字符串格式,没法直接求和,得先把它转成总分钟数(再按需转成小时,匹配你期望的结果格式)。写个简单的辅助函数:

def time_to_minutes(time_str):
    # 分割小时和分钟,转成整数后计算总分钟
    hours, minutes = map(int, time_str.split(':'))
    return hours * 60 + minutes

第二步:遍历嵌套结构计算平均值

接下来咱们遍历外层字典的每个地点(AKL/CHC),然后针对每个时间类型(Fhr/Dhr/Thr),收集所有对应的值,转成数值后计算平均值,再整理成你想要的格式:

avg = {'AKL': [{'Fhr': '19:30', 'Dhr': '39:25', 'Thr': '141:00'}, {'Fhr': '58:10', 'Dhr': '130:35', 'Thr': '414:25'}, {'Fhr': '7:30', 'Dhr': '18:25', 'Thr': '30:40'}, {'Fhr': '7:00', 'Dhr': '14:15', 'Thr': '26:30'}], 'CHC': [{'Fhr': '33:10', 'Dhr': '62:20', 'Thr': '157:20'}, {'Fhr': '51:55', 'Dhr': '101:40', 'Thr': '263:55'}]}

result_dict = {}
for location, entries in avg.items():
    # 初始化每个时间类型的总和,用来累加
    total_times = {'Fhr': 0, 'Dhr': 0, 'Thr': 0}
    entry_count = len(entries)
    
    # 遍历每个子字典,累加时间值
    for entry in entries:
        total_times['Fhr'] += time_to_minutes(entry['Fhr'])
        total_times['Dhr'] += time_to_minutes(entry['Dhr'])
        total_times['Thr'] += time_to_minutes(entry['Thr'])
    
    # 计算平均值,转成小时并保留两位小数(和你的期望结果匹配)
    result_dict[location] = {
        'Avg Fhr': round(total_times['Fhr'] / entry_count / 60, 2),
        'Avg Dhr': round(total_times['Dhr'] / entry_count / 60, 2),
        'Avg Thr': round(total_times['Thr'] / entry_count / 60, 2)
    }

print(result_dict)

运行结果

执行这段代码后,会得到和你期望逻辑一致的输出:

{'AKL': {'Avg Fhr': 23.04, 'Avg Dhr': 50.67, 'Avg Thr': 153.13}, 'CHC': {'Avg Fhr': 42.32, 'Avg Dhr': 82.0, 'Avg Thr': 210.62}}

(注:你的期望结果里AKL的数值可能是近似取值,核心计算逻辑是没问题的,你可以根据实际需求调整小数位数或者转换规则)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:07:48