Python如何计算字典内同名模型前缀列表对应索引位置元素的平均值
实现方案
处理逻辑
- 遍历外层列表的每一条时间序列数据,提取时间序列ID和对应的所有模型运行结果
- 对模型运行结果的键按下划线拆分,提取模型名称作为分组依据,将相同模型不同运行次数的列表归为同一组
- 对同一组下的所有列表,按索引位置配对元素,计算每组配对元素的平均值,组装为新的列表
- 最后按要求的结构拼接结果即可
完整代码
# 输入数据 input_data = [ {'NN3-001': {'diffe_1':[1,2,3,4],'mas_1':[10,20,30,40],'diffe_2':[5,6,7,8],'mas_2':[50,60,70,80]}}, {'NN3-002': {'diffe_1':[14,15,16,17],'mas_1':[100,200,300,400],'diffe_2':[18,19,20,21],'mas_2':[500,600,700,800]}} ] result = [] for ts_item in input_data: # 获取当前时间序列ID和对应的模型数据 ts_id, model_raw = next(iter(ts_item.items())) model_groups = {} # 按模型名分组 for run_key, val_list in model_raw.items(): model_name = run_key.split("_")[0] if model_name not in model_groups: model_groups[model_name] = [] model_groups[model_name].append(val_list) # 计算每个模型的索引平均值 model_avg = {} for name, lists in model_groups.items(): # 按索引配对所有列表的元素,计算平均 avg_list = [sum(pos_vals) / len(lists) for pos_vals in zip(*lists)] # 示例输出为整数,这里做类型转换,不需要可以删除 model_avg[name] = list(map(int, avg_list)) result.append({ts_id: model_avg}) # 输出结果 print(result)
运行结果
执行上述代码后输出的结果和你期望的结构完全一致:
[{'NN3-001': {'diffe': [3, 4, 5, 6], 'mas': [30, 40, 50, 60]}}, {'NN3-002': {'diffe': [16, 17, 18, 19], 'mas': [300, 400, 500, 600]}}]
内容的提问来源于stack exchange,提问作者João David de Freitas
相关产品推荐
相关产品推荐

