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

如何用Python对数组中JSON格式数据排序及转换分组结果为JSON

我来帮你一步步解决这两个问题,直接上实用的方案和代码示例:

一、对数组中的JSON格式数据排序

在Python中,我们通常把JSON格式的数据解析为字典列表来处理。排序的核心是用内置的sorted()函数,通过key参数指定排序依据的字段。

示例场景

假设你有这样的数组(每个元素对应一条JSON格式的数据):

json_array = [
    {"category": "A", "total_count": 50, "total_predicted_postive_rate": 0.7},
    {"category": "B", "total_count": 30, "total_predicted_postive_rate": 0.9},
    {"category": "C", "total_count": 70, "total_predicted_postive_rate": 0.6}
]

1. 按单个字段排序

  • 升序排序(比如按total_count从小到大):
sorted_by_count = sorted(json_array, key=lambda x: x['total_count'])
  • 降序排序(比如按total_predicted_postive_rate从高到低):
sorted_by_rate = sorted(json_array, key=lambda x: x['total_predicted_postive_rate'], reverse=True)

2. 按多个字段排序

如果需要先按一个字段排序,再按另一个字段排序(比如先按正例率降序,再按总数升序):

sorted_multi = sorted(
    json_array,
    key=lambda x: (-x['total_predicted_postive_rate'], x['total_count'])
)

这里用-号实现降序,避免重复写reverse=True。

二、将分组结果转换为JSON格式

你的results是嵌套字典结构,分两种情况处理:

情况1:直接处理Python字典

如果results是普通的Python字典,用标准库的json模块最灵活:

import json

# 假设你的results完整结构如下
total_count = 100
total_predicted_postive_count = 65
total_predicted_negative_count = 35
total_predicted_postive_rate = 0.65
total_predicted_negative_rate = 0.35

results = {
    'main_category': {
        'total_count': total_count,
        'total_predicted_postive_count': total_predicted_postive_count,
        'total_predicted_negative_count': total_predicted_negative_count,
        'total_predicted_postive_rate': total_predicted_postive_rate,
        'total_predicted_negative_rate': total_predicted_negative_rate
    }
}

# 转换为格式化的JSON字符串
json_result = json.dumps(results, indent=4, ensure_ascii=False)
print(json_result)

参数说明:

  • indent=4:让JSON输出带缩进,可读性更强
  • ensure_ascii=False:如果结果包含中文,不会被转成Unicode编码

情况2:处理Pandas分组结果

如果你的分组是用Pandas的groupby完成的,建议先把聚合结果转成DataFrame,再用to_json()方法:

import pandas as pd

# 假设原始数据是这样的DataFrame
df = pd.DataFrame({
    'main_category': ['X', 'X', 'Y', 'Y'],
    'count': [20, 30, 40, 10],
    'predicted_positive': [15, 21, 32, 7]
})

# 分组聚合得到统计结果
grouped_results = df.groupby('main_category').agg(
    total_count=('count', 'sum'),
    total_predicted_postive_count=('predicted_positive', 'sum'),
    total_predicted_postive_rate=('predicted_positive', lambda x: x.sum()/x.count())
).reset_index()

# 转换为JSON,orient参数控制输出格式
# 输出为字典列表(适合多分类场景)
json_result = grouped_results.to_json(orient='records', indent=4, force_ascii=False)
print(json_result)

常用的orient参数:

  • 'records':输出为[{...}, {...}]的列表格式,适合多分类结果
  • 'index':以分组键为顶级键,和你现在的results结构一致
  • 'columns':以统计字段为顶级键

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:30:54