如何在Python中对JSON数组按指定键排序及按category分组
问题1:对JSON数组按内部某个键排序
在Python中,将JSON字符串解析为列表后,可使用内置的sorted()函数,通过key参数指定排序依据的键:
示例代码
假设已将JSON解析为列表data:
# 按"id"升序排序 sorted_by_id = sorted(data, key=lambda item: item["id"]) # 按"x_name"降序排序 sorted_by_name_desc = sorted(data, key=lambda item: item["x_name"], reverse=True) # 处理键可能不存在的情况(避免KeyError) sorted_safe = sorted(data, key=lambda item: item.get("category", ""))
key参数接受一个匿名函数,返回用于排序的字段值;reverse=True可实现降序排列。
问题2:按"category"属性分组JSON数组
Python中可以通过字典(或collections.defaultdict)高效实现分组,步骤如下:
方法1:使用collections.defaultdict(简洁写法)
from collections import defaultdict # 假设data是解析后的JSON列表 grouped = defaultdict(list) for item in data: category = item["category"] grouped[category].append(item) # 转换为期望的输出格式 result = [{"category": cat, "points": items} for cat, items in grouped.items()]
方法2:使用普通字典(无需额外导入)
grouped = {} for item in data: category = item["category"] if category not in grouped: grouped[category] = [] grouped[category].append(item) # 同样转换为目标格式 result = [{"category": cat, "points": items} for cat, items in grouped.items()]
两种方法的时间复杂度均为O(n)(n为数组长度),仅需遍历一次原数组即可完成分组,适合处理未知数量的类别和条目。
内容的提问来源于stack exchange,提问作者nt95
相关产品推荐
相关产品推荐

