聚合和汇总Python字典以创建新的字典结构

8yoxcaq7  于 2023-05-21  发布在  Python
关注(0)|答案(2)|浏览(168)

我有一个数据集,其中包括每周跑步活动的次数,我想汇总每周的距离和运动时间之和。

数据如下:

[
    {
        "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
    }
]

我想把它转换成下面的结构,而不使用库:

[
    {
        "week_number": 20,
        "total_distance": 26516.3,
        "Total_moving_time": 7073
    },
    {
        "week_number": 19,
        "total_distance": 30070.4,
        "Total_moving_time": 7100
    },
    {
        "week_number": 18,
        "total_distance": 20070.4,
        "Total_moving_time": 6100
    }
]

我得到的最接近的是下面,使用嵌套循环,但它不适合在前端访问:

{
"20":
    {"distance":26515,"moving_time":7837},
"19":
    {"distance":58594,"moving_time":18719},
"18":
    {"distance":41346,"moving_time":12796}
}

关于使用Pandas的StackOverflow有很多建议,但我想学习在没有库的情况下使用它。
任何帮助都很感激。

eeq64g8w

eeq64g8w1#

  • 创建一个空字典,其中的键是唯一的周数。
  • 检查aggregated_data中是否已经有周数。如果是,则将其距离和移动时间添加到总数中。如果不是,我们在dict中为它创建一个新条目。
  • 将aggregated_data转换为它的值的列表,这些值是每周的聚合字典。
aggregated_data = {}
for item in data:
    week_number = item['week_number']
    if week_number in aggregated_data:
        aggregated_data[week_number]['total_distance'] += item['distance']
        aggregated_data[week_number]['total_moving_time'] += item['moving_time']
    else:
        aggregated_data[week_number] = {
            'week_number': week_number,
            'total_distance': item['distance'],
            'total_moving_time': item['moving_time']
        }

aggregated_data = list(aggregated_data.values())
j2datikz

j2datikz2#

1.创建字典存储和

distance_sums = {}
moving_time_sums = {}

2.迭代数据并计算总和

for item in data:
   week_number = item["week_number"]
   distance = item["distance"]
   moving_time = item["moving_time"]

3.更新周距离总和

if week_number in distance_sums:
    distance_sums[week_number] += distance
else:
    distance_sums[week_number] = distance

4.更新该周的移动时间总和

if week_number in moving_time_sums:
    moving_time_sums[week_number] += moving_time
else:
    moving_time_sums[week_number] = moving_time

5.打印distance_sums.items()中week_number,distance_sum的合计金额

print("Week", week_number)
print("Distance:", distance_sum)
print("Moving Time:", moving_time_sums[week_number])
print() #* this will create new line after each iteration.

相关问题