Python中如何按id键匹配合并两个JSON对象数组
高效合并按id匹配的JSON数组方案
你现有嵌套循环的实现时间复杂度为O(n*m),数据量较大时性能损耗严重,且代码存在语法问题(初始化的no3是字典,直接调用append方法会触发KeyError)。以下是两种效率更高的实现方案:
方案1:字典映射法(时间复杂度O(n+m),无第三方依赖)
逻辑:先将其中一个数组转换为以id为键的查找字典,单次遍历另一个数组即可完成合并,查找操作时间复杂度为O(1)。
# 先把no2转为id为键的字典,方便快速查找 no2_map = {item['id']: item for item in no2} # 遍历no1合并对应id的字段,最终结果为列表 no3 = [{**item, **no2_map.get(item['id'], {})} for item in no1]
如果需要保留仅在no2中存在的id,可追加如下逻辑:
# 收集no1中已存在的id集合 no1_ids = {item['id'] for item in no1} for item in no2: if item['id'] not in no1_ids: no3.append(item)
方案2:Pandas合并法(适合万条以上大规模数据场景)
如果处理的数据量极大,可以用pandas的内置合并操作进一步优化性能:
import pandas as pd df1 = pd.DataFrame(no1) df2 = pd.DataFrame(no2) # 按id列外合并,保留两边所有id的数据,可将how参数改为inner只保留两边共有的id merged_df = pd.merge(df1, df2, on='id', how='outer') # 转回字典列表格式 no3 = merged_df.to_dict('records')
效率对比
- 嵌套循环方案:1万条数据级别的合并需要约1亿次匹配操作,耗时可达数秒
- 字典映射方案:1万条数据仅需2万次操作,耗时仅为毫秒级
内容的提问来源于stack exchange,提问作者camelyellow
相关产品推荐
相关产品推荐

