Python中按day字段分组并规范化JSON格式的实现方法
按'day'字段分组JSON列表并格式化的简便实现
纯Python实现(无第三方依赖)
不需要借助pandas,直接用基础字典和集合就能完成分组逻辑,代码简洁高效:
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}, ] result = {} for item in data: day = item['day'] # 初始化当前日期的分组结构 if day not in result: result[day] = {'area': set(), 'num': set()} # 将area和num加入对应集合 result[day]['area'].add(item['info']['area']) result[day]['num'].add(item['num']) # 转换为期望的列表格式 final_output = [result] print(final_output)
这段代码的逻辑:
- 遍历每个数据项,以
day作为分组键 - 对每个日期,初始化包含
area和num集合的结构 - 逐个将数据中的
area和num添加到对应集合中(集合会自动处理重复值) - 最后将分组结果字典包裹进列表,得到与期望一致的输出
简化版pandas实现(如果已依赖pandas)
如果你的项目已经在使用pandas,可以用更简洁的聚合逻辑实现:
import pandas as pd 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}, ] # 提取info中的area字段到单独列 df = pd.DataFrame(data).assign(area=lambda x: x['info'].map(lambda i: i['area'])) # 按day分组,聚合area和num为集合 grouped_result = df.groupby('day')[['area', 'num']].agg(set).to_dict('index') final_output = [grouped_result] print(final_output)
内容的提问来源于stack exchange,提问作者user22391597
相关产品推荐
相关产品推荐

