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

如何使用Python按一级Key收集并重新解析JSON数据

如何用Python按system字段分组JSON数据

现有一组JSON数据,每个元素包含system字段和单个data对象,需要将相同system值的元素合并,把对应的data对象汇总为数组,最终输出分组后的JSON格式。

原始输入JSON

[{"system": "test111","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.000000","value": 0}},{"system": "test111","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.111111","value": 11}},{"system": "test111","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.222222","value": 22}},{"system": "test222","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.333333","value": 33}},{"system": "test222","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.444444","value": 44}},{"system": "test333","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.555555","value": 55}},{"system": "test333","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.666666","value": 66}},{"system": "test444","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.777777","value": 77}},{"system": "test444","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.888888","value": 88}},{"system": "test555","data": {"title": "SomeValue","time": "2022-10-22T10:36:43.999999","value": 99}}]

目标输出JSON

[{"system": "test111","data": [{"title": "SomeValue","time": "2022-10-22T10:36:43.000000","value": 0},{"title": "SomeValue","time": "2022-10-22T10:36:43.111111","value": 11},{"title": "SomeValue","time": "2022-10-22T10:36:43.222222","value": 22}]},{"system": "test222","data": [{"title": "SomeValue","time": "2022-10-22T10:36:43.333333","value": 33},{"title": "SomeValue","time": "2022-10-22T10:36:43.444444","value": 44}]},{"system": "test333","data": [{"title": "SomeValue","time": "2022-10-22T10:36:43.555555","value": 55},{"title": "SomeValue","time": "2022-10-22T10:36:43.666666","value": 66}]},{"system": "test444","data": [{"title": "SomeValue","time": "2022-10-22T10:36:43.777777","value": 77},{"title": "SomeValue","time": "2022-10-22T10:36:43.888888","value": 88}]},{"system": "test555","data": [{"title": "SomeValue","time": "2022-10-22T10:36:43.999999","value": 99}]}]

解决方法

方法1:普通字典手动分组

手动遍历元素,用system作为键存储对应data列表,最后转换为目标格式:

import json

# 加载原始JSON为Python列表
raw_data = json.loads('你的原始JSON字符串')
grouped_dict = {}

for item in raw_data:
    system_key = item['system']
    if system_key not in grouped_dict:
        grouped_dict[system_key] = []
    grouped_dict[system_key].append(item['data'])

# 转换为目标格式
result = [{'system': k, 'data': v} for k, v in grouped_dict.items()]

# 输出格式化后的JSON
print(json.dumps(result, indent=2))

方法2:用collections.defaultdict简化代码

defaultdict自动初始化不存在的键对应的列表,减少判断逻辑:

import json
from collections import defaultdict

raw_data = json.loads('你的原始JSON字符串')
grouped_dict = defaultdict(list)

for item in raw_data:
    grouped_dict[item['system']].append(item['data'])

result = [{'system': k, 'data': v} for k, v in grouped_dict.items()]
print(json.dumps(result, indent=2))

方法3:用itertools.groupby分组

注意:groupby要求数据先按分组键排序,否则仅会连续分组相同元素:

import json
from itertools import groupby

raw_data = json.loads('你的原始JSON字符串')
# 先按system字段排序
sorted_data = sorted(raw_data, key=lambda x: x['system'])

result = []
for system_key, group in groupby(sorted_data, key=lambda x: x['system']):
    data_list = [item['data'] for item in group]
    result.append({'system': system_key, 'data': data_list})

print(json.dumps(result, indent=2))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:54:59