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

如何解析大型JSON文件:将x值取整并对重复x值的y值求平均

Python处理JSON数据:x值取整并合并重复x的y值平均值

实现思路

  1. 读取原始JSON文件并解析为Python字典
  2. 遍历DATA1中的每个数据项,将x值四舍五入到最近整数
  3. 用字典分组存储:以四舍五入后的x为键,收集对应所有y值,同时保留z值(示例中z均为null,这里取同组第一个条目z值)
  4. 遍历分组结果,计算每组y值的平均值,生成新的数据条目
  5. 将处理后的数据写入新的JSON文件

完整代码实现

import json

def process_json(input_path, output_path):
    # 读取原始JSON文件
    with open(input_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    # 用于分组存储的字典,键为取整后的x值
    grouped_data = {}
    for item in data['DATA1']:
        # 四舍五入x到最近整数,转成float保持和示例一致的格式(如1.0而非1)
        rounded_x = round(item['x'])
        rounded_x = float(rounded_x)
        
        # 分组逻辑:存在则追加y值,不存在则初始化
        if rounded_x in grouped_data:
            grouped_data[rounded_x]['y_list'].append(item['y'])
        else:
            grouped_data[rounded_x] = {
                'y_list': [item['y']],
                'z_val': item['z']
            }
    
    # 生成处理后的最终数据列表
    processed_result = []
    for x_val, info in grouped_data.items():
        avg_y = sum(info['y_list']) / len(info['y_list'])
        processed_result.append({
            'x': x_val,
            'y': avg_y,
            'z': info['z_val']
        })
    
    # 写入新JSON文件
    with open(output_path, 'w', encoding='utf-8') as f:
        json.dump({'DATA1': processed_result}, f, indent=2)

# 调用函数处理文件
process_json('original.json', 'new.json')

关键细节说明

  • x值格式统一:用round()完成四舍五入后转成float,保证输出和示例一致(如1.0而非整数1)
  • 高效分组:字典的O(1)查找特性避免了嵌套循环,适合处理大型JSON数据
  • y值平均计算:直接用sum()和len()计算平均值,简洁高效
  • z值处理:默认取同组第一个条目的z值,若你的场景中同组z值可能不同,可根据需求调整(比如统一设为null或取最后一个条目值)

注意事项

  • 原始示例JSON存在语法错误(最后一个条目后多了逗号),实际使用时需要修正,否则json.load()会抛出解析错误
  • 如果处理超大型JSON(内存无法一次性加载),可以改用ijson库进行流式解析,避免内存溢出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:52:48