如何用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
相关产品推荐
相关产品推荐

