Python如何处理多层嵌套的字典与列表并实现加权均值计算
实现方案
核心思路
- 先统计所有外层条目的权重总和,避免后续重复计算
- 用字典以日期为key,累计每个日期的加权值总和(
value * 所属条目的weight) - 遍历完所有数据后,将累计值除以总权重得到每个日期的加权平均值,再转为指定格式的列表
代码实现
import datetime from collections import defaultdict # 计算所有外层条目的总权重 total_weight = sum(item["weight"] for item in my_obj) # 按日期累计加权后的值总和 date_weighted_sum = defaultdict(float) for outer_item in my_obj: current_weight = outer_item["weight"] # 遍历当前条目下的所有日期数据 for data_item in outer_item["data"]: current_date = data_item["date"] date_weighted_sum[current_date] += data_item["value"] * current_weight # 生成最终结果列表,sorted保证日期按时间顺序排列,不需要可删除 result_data = [ {"date": date, "value": total_val / total_weight} for date, total_val in sorted(date_weighted_sum.items()) ] # 按需求格式输出的最终结构 final_output = {"data": result_data}
方案说明
- 无需提前获知外层列表
my_obj的长度,遍历逻辑自适应任意长度的外层列表 - 直接用datetime对象作为字典key,无需额外格式转换,不会出现日期匹配错误
- 兼容不同外层条目的data列表日期不对齐的场景,即使部分条目缺失某一天的数据也能正确计算
- 用
defaultdict简化累计逻辑,不需要额外判断日期key是否存在
内容的提问来源于stack exchange,提问作者paulogil2010
相关产品推荐
相关产品推荐

