You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不依赖库实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:33:09