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
相关产品推荐
相关产品推荐

