如何遍历日期值嵌套列表,按唯一日期分组累加对应数值
按日期累加嵌套列表数值实现方案
核心逻辑
你已经完成了唯一日期提取的步骤,后续只需要通过位置索引关联日期和对应数值,按日期分组累加后重组格式即可,全程保留日期首次出现的顺序,适配Excel导入的顺序要求。
实现步骤
- 初始化累加容器:以去重后的日期为键,给每个键初始化和数值行数量等长的0值列表,用来存每一行数值的累加结果
- 按索引遍历匹配:遍历原始日期行的每一个位置,拿到当前位置的日期后,把所有数值行在这个位置的值,累加到容器对应日期的统计项里
- 重组结果格式:第一行放去重后的日期列表,后续逐行提取每个日期对应位置的累加值,拼成和原始结构一致的嵌套列表
完整可运行代码
data = [['20-01-22', '20-01-22', '09-09-21'], [10, 10, 10], [12, 10, 1 ]] # 已完成的唯一日期提取逻辑 keys = data[0] unique_dates = [] for x in keys: if x not in unique_dates: unique_dates.append(x) # 计算数值行的总数量(排除第一行日期行) value_row_num = len(data) - 1 # 初始化累加字典 sum_mapping = {date: [0]*value_row_num for date in unique_dates} # 遍历每个日期的位置索引,完成数值累加 for pos_idx, current_date in enumerate(data[0]): for row_idx in range(value_row_num): # 数值行从索引1开始,所以取row_idx+1行对应位置的值累加 sum_mapping[current_date][row_idx] += data[row_idx + 1][pos_idx] # 拼接为最终目标格式 final_data = [unique_dates] for row_idx in range(value_row_num): line_data = [sum_mapping[date][row_idx] for date in unique_dates] final_data.append(line_data)
运行后final_data的输出和预期结果完全一致:
[['20-01-22', '09-09-21'], [20, 10], [22, 1]]
提示:如果后续新增数值行,这段代码不需要修改逻辑,会自动适配行数做累加。
内容的提问来源于stack exchange,提问作者aoife
相关产品推荐
相关产品推荐

