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

Python如何按多个字典键分组 按年份与城市聚合date及pts字段

实现方法

你提前提取的list_year和list_city可用于后续结果过滤,若你的原始数据所有年份、城市都在这两个列表范围内,也可以不用额外调用。以下提供2种无第三方依赖的纯Python实现:

方法1:字典做中间缓存(推荐,逻辑简单,无需提前排序)

# 用(year, city)元组作为分组唯一键
group_map = {}
for item in list_pts:
    key = (item['year'], item['city'])
    # 键不存在时初始化结构
    if key not in group_map:
        group_map[key] = {'year': item['year'], 'city': item['city'], 'date': [], 'pts': []}
    # 追加同组的对应字段
    group_map[key]['date'].append(item['date'])
    group_map[key]['pts'].append(item['pts'])

# 转成期望的列表格式,需要和示例pts排序一致的话可以加sorted处理
output = []
for v in group_map.values():
    v['pts'] = sorted(v['pts'])
    output.append(v)

方法2:使用itertools.groupby实现

注意groupby仅会将连续相同键的元素分为一组,因此分组前必须先按year和city排序:

import itertools

# 先按分组字段排序
sorted_pts = sorted(list_pts, key=lambda x: (x['year'], x['city']))
output = []
for (year, city), group in itertools.groupby(sorted_pts, key=lambda x: (x['year'], x['city'])):
    date_list = []
    pts_list = []
    for item in group:
        date_list.append(item['date'])
        pts_list.append(item['pts'])
    output.append({'year': year, 'city': city, 'date': date_list, 'pts': sorted(pts_list)})

可选:使用pandas简化代码

如果允许使用第三方数据分析库pandas,代码会更简洁:

import pandas as pd

df = pd.DataFrame(list_pts)
# 按year、city分组,其余字段聚合为列表
output = df.groupby(['year', 'city'], as_index=False).agg(list).to_dict('records')

内容的提问来源于stack exchange,提问作者Maxime Lara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:27:03