如何用Pythonic方法计算嵌套字典中value_held_graph各索引均值
682.6094632572457
]},
'winner_num_1': {'cash_held': 2307.4282142925185,
'value_held_graph': [655.0,
643.9625087246983,
714.9614460254422,
716.9587778340948,
...
713.7097698975869
]},
'winner_num_N': {'cash_held': 2307.4282142925185,
'value_held_graph': [655.0,
654.5754236503379,
659.630701080459,
664.9212169741535,
...
654.4366560963232
]}
}
该字典包含N个以`winner_num_`为前缀的键,每个键对应的值中包含`value_held_graph`列表。需要用Pythonic的方法,计算所有`value_held_graph`列表中相同索引位置元素的平均值,最终得到类似如下的结果: ```python value_held_graph_mean = [655.0, 651.9079605, 680.903074, 685.1103153, ..., 683.5852964]
解决方案
原生Python实现(无第三方依赖)
用列表推导式结合zip()函数即可高效完成:
# 提取所有目标列表 all_graphs = [item['value_held_graph'] for item in nested_dict.values()] # 按索引位置计算平均值 value_held_graph_mean = [sum(index_values) / len(index_values) for index_values in zip(*all_graphs)]
[item['value_held_graph'] for item in nested_dict.values()]:从字典中批量提取所有value_held_graph列表,生成嵌套列表。zip(*all_graphs):通过解包操作,把所有列表中相同索引的元素打包成元组,比如第一个元组包含所有列表的第0个元素,第二个元组包含所有列表的第1个元素。- 遍历每个元组,求和后除以元组长度(即参与计算的列表数量),得到对应索引的平均值。
基于numpy的高效实现(适合大数据量)
如果处理的列表长度长、数量多,用numpy的向量化运算速度更快:
import numpy as np # 转换为numpy数组 graph_array = np.array([item['value_held_graph'] for item in nested_dict.values()]) # 按列计算平均值并转回Python列表 value_held_graph_mean = graph_array.mean(axis=0).tolist()
axis=0参数指定按列(即相同索引方向)计算平均值,最后用.tolist()将numpy数组转回普通Python列表。
内容的提问来源于stack exchange,提问作者billv1179
相关产品推荐
相关产品推荐

