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

Python中如何无需for循环为百万级JSON记录追加key字段

百万级JSON数组高效添加序号Key的实现方案

需求是将如下结构的JSON:

{ "records": 
  [ 
    { "value": {"col1":"val11","col2":"val12"} }, 
    { "value": {"col1":"val21","col2":"val22"} } 
  ] 
}

转换为每个数组元素包含key-N序号字段的结构:

{ "records": 
  [ 
    {  "key": "key-1",
       "value": {"col1":"val11","col2":"val12"} 
    }, 
    { "key": "key-2",
      "value": {"col1":"val21","col2":"val22"} 
    } 
  ] 
}

由于数据量可达百万级,需避免低效的显式for循环,以下是几种高性能实现方案:

方案一:列表推导式(Python原生高效实现)

列表推导式由底层C代码实现,比普通for循环+append的方式性能提升数倍,代码简洁:

# 假设原始数据已加载为Python字典data
data['records'] = [{"key": f"key-{i+1}", **item} for i, item in enumerate(data['records'])]

方案二:map函数结合enumerate

map函数同样基于底层优化,通过匿名函数批量处理元素,避免显式循环语法:

data['records'] = list(map(lambda x: {"key": f"key-{x[0]+1}", **x[1]}, enumerate(data['records'])))

方案三:Pandas矢量化处理(超大数据量最优解)

针对千万级以上数据,Pandas的矢量化操作将循环转移到C语言层面,性能优势显著:

import pandas as pd

# 将records数据转换为DataFrame
df = pd.DataFrame([item['value'] for item in data['records']])
# 生成key列
df['key'] = df.index.map(lambda idx: f"key-{idx+1}")
# 转换回目标JSON结构
data['records'] = df.apply(
    lambda row: {"key": row['key'], "value": row.drop('key').to_dict()},
    axis=1
).tolist()

性能说明

Python的显式for循环因解释执行的特性,每次迭代存在Python层面的开销;而上述方案均将循环逻辑放在底层优化的代码中执行,能大幅降低处理百万级数据的耗时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:46:11