如何基于index字段合并两个来自独立JSON文件的字典列表
基于index字段合并两个JSON字典列表的高效方法
问题背景
现有两个独立JSON文件,内容均为字典列表,每个字典都包含index字段。需要基于index将两个列表合并,最终每个字典同时包含index、name、desc字段。示例数据如下:
列表1(含name字段)
[ {"index": 217, "name": "Battery"}, {"index": 218, "name": "Fluffy"}, {"index": 219, "name": "Dazzling"}, {"index": 220, "name": "Soul-Heart"} ]
列表2(含desc字段)
[ {"index": 217, "desc": "Text info 2"}, {"index": 218, "desc": "will be very informative"}, {"index": 219, "desc": "dont know what else i could write here"}, {"index": 220, "desc": "Boosts my wallet"} ]
期望合并结果
[ {"index": 217, "name": "Battery", "desc": "Text info 2"}, {"index": 218, "name": "Fluffy", "desc": "will be very informative"}, {"index": 219, "name": "Dazzling", "desc": "dont know what else i could write here"}, {"index": 220, "name": "Soul-Heart", "desc": "Boosts my wallet"} ]
由于数据量较大,需要选择时间复杂度低、内存友好的合并方案,以下是两种实用方法:
方案1:纯Python哈希映射(推荐中小到大规模数据)
核心思路是将其中一个列表转换为以index为键的字典,把查找操作的时间复杂度从O(n)降到O(1),整体时间复杂度为O(n+m)(n、m分别为两个列表的长度),避免低效的双重循环。
代码实现
import json # 读取两个JSON文件 with open('list1.json', 'r', encoding='utf-8') as f: list_with_names = json.load(f) with open('list2.json', 'r', encoding='utf-8') as f: list_with_descs = json.load(f) # 将含desc的列表转为index: desc的映射字典 desc_mapping = {item['index']: item['desc'] for item in list_with_descs} # 合并数据 merged_result = [] for item in list_with_names: merged_item = item.copy() # 避免修改原数据 # 匹配对应desc,若index不存在则设为空字符串(可根据需求调整默认值) merged_item['desc'] = desc_mapping.get(item['index'], '') merged_result.append(merged_item) # 保存合并结果 with open('merged_result.json', 'w', encoding='utf-8') as f: json.dump(merged_result, f, indent=2, ensure_ascii=False)
优势
- 内存占用低:仅额外存储index与desc的映射关系
- 兼容性强:无需依赖第三方库
- 容错性好:通过
get方法处理index不匹配的情况,避免报错
方案2:Pandas合并(适合超大规模数据)
如果数据量达到百万级甚至更大,Pandas的merge方法底层基于优化过的算法,处理速度更快,还能灵活处理不同的匹配规则(交集、并集等)。
代码实现
import pandas as pd import json # 读取JSON数据为DataFrame df_names = pd.read_json('list1.json') df_descs = pd.read_json('list2.json') # 基于index字段合并,how参数控制匹配规则 # how='inner':仅保留两边都存在的index;how='outer':保留所有index;how='left':保留list1的所有index merged_df = pd.merge(df_names, df_descs, on='index', how='inner') # 将DataFrame转回字典列表并保存 merged_result = merged_df.to_dict('records') with open('merged_result.json', 'w', encoding='utf-8') as f: json.dump(merged_result, f, indent=2, ensure_ascii=False)
优势
- 处理超大规模数据效率更高
- 支持多种匹配规则,满足复杂需求
- 可快速扩展后续数据清洗、分析操作
内容的提问来源于stack exchange,提问作者TLListenreich
相关产品推荐
相关产品推荐

