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

基于groupby的JSON格式化后续:按日期分组重组数据

按day分组格式化字典列表

这是此前《Normalize JSON format in python with groupby》问题的后续需求:将给定的字典列表按day字段分组,把关联的area和num值整理为对应列表(单个数据时保留原值)。

样例数据

data = [
    {'info': {'area': 'USA', 'other': 'cat'}, 'day': '1-1-2012', 'num': 12},
    {'info': {'area': 'KSA', 'other': 'bat'}, 'day': '1-1-2012', 'num': 52},
    {'info': {'area': 'KSA', 'other': 'fat'}, 'day': '4-3-2012', 'num': 34}
]

实现代码

from itertools import groupby

# 先按day排序,确保groupby能正确分组(groupby仅对连续相同键分组)
sorted_data = sorted(data, key=lambda x: x['day'])
result = []

for day, group in groupby(sorted_data, key=lambda x: x['day']):
    items = list(group)
    # 提取当前分组的所有area和num值
    areas = [item['info']['area'] for item in items]
    nums = [item['num'] for item in items]
    # 单个元素时取原值,多个元素时保留列表
    area_val = areas[0] if len(areas) == 1 else areas
    num_val = nums[0] if len(nums) == 1 else nums
    # 组装结果字典
    result.append({
        'day': day,
        'area': area_val,
        'num': num_val
    })

print(result)

输出结果

[
    {'day': '1-1-2012', 'area': ['USA', 'KSA'], 'num': [12, 52]},
    {'day': '4-3-2012', 'area': 'KSA', 'num': 34}
]

关键说明

  • itertools.groupby依赖连续相同的分组键,因此必须先对数据按day排序,否则会出现同day数据被拆分到多个分组的情况。
  • 通过判断收集到的area、num列表长度,决定最终存储单个值还是列表,完全匹配需求格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:38:15