不依赖库实现Python字典聚合求和,生成新数据结构
无第三方库实现跑步数据按周聚合
核心思路
先通过临时字典(对象)按周数聚合距离和时间的总和,再将字典转换为前端易访问的数组结构,同时保持周数从大到小的排序。
Python 实现
# 原始跑步数据 running_data = [ {"week_number": 20, "distance": 16510.7, "moving_time": 4822}, {"week_number": 20, "distance": 10005.6, "moving_time": 3015}, {"week_number": 19, "distance": 13746.5, "moving_time": 4058}, {"week_number": 19, "distance": 13391.8, "moving_time": 4137}, {"week_number": 18, "distance": 14996.3, "moving_time": 4713}, {"week_number": 18, "distance": 10070.4, "moving_time": 3100} ] # 1. 按周数聚合数据 aggregated = {} for entry in running_data: week = entry["week_number"] # 若当前周未初始化,创建初始条目 if week not in aggregated: aggregated[week] = {"distance": 0, "moving_time": 0} # 累加距离和时间 aggregated[week]["distance"] += entry["distance"] aggregated[week]["moving_time"] += entry["moving_time"] # 2. 转换为目标数组结构(按周数降序排列) result = [] for week in sorted(aggregated.keys(), reverse=True): result.append({ "week_number": week, "total_distance": aggregated[week]["distance"], "Total_moving_time": aggregated[week]["moving_time"] }) # 输出结果 import json print(json.dumps(result, indent=2))
执行后输出:
[ { "week_number": 20, "total_distance": 26516.3, "Total_moving_time": 7837 }, { "week_number": 19, "total_distance": 27138.3, "Total_moving_time": 8195 }, { "week_number": 18, "total_distance": 25066.7, "Total_moving_time": 7813 } ]
JavaScript 实现(适配前端场景)
// 原始跑步数据 const runningData = [ {"week_number": 20, "distance": 16510.7, "moving_time": 4822}, {"week_number": 20, "distance": 10005.6, "moving_time": 3015}, {"week_number": 19, "distance": 13746.5, "moving_time": 4058}, {"week_number": 19, "distance": 13391.8, "moving_time": 4137}, {"week_number": 18, "distance": 14996.3, "moving_time": 4713}, {"week_number": 18, "distance": 10070.4, "moving_time": 3100} ]; // 1. 按周数聚合数据 const aggregated = {}; runningData.forEach(entry => { const week = entry.week_number; if (!aggregated[week]) { aggregated[week] = { distance: 0, moving_time: 0 }; } aggregated[week].distance += entry.distance; aggregated[week].moving_time += entry.moving_time; }); // 2. 转换为目标数组并按周数降序排序 const result = Object.entries(aggregated) .sort(([weekA], [weekB]) => weekB - weekA) .map(([week, data]) => ({ week_number: parseInt(week), total_distance: data.distance, Total_moving_time: data.moving_time })); // 输出结果 console.log(JSON.stringify(result, null, 2));
执行后输出与Python版本一致,直接可用于前端渲染。
内容的提问来源于stack exchange,提问作者Steven Diffey
相关产品推荐
相关产品推荐

