如何通过映射合并两个JSON数据?含示例及预期输出
合并两个JSON列表并补全缺失字段的实现方法
问题背景
现有两个JSON格式的列表数据:
json_1 = [{'purchasedPerson__id': 2, 'credit': 3000}, {'purchasedPerson__id': 4, 'credit': 5000}] json_2 = [{'purchasedPerson__id': 1, 'debit': 8526}, {'purchasedPerson__id': 4, 'debit': 2000}]
需要将二者合并,要求按purchasedPerson__id进行匹配,缺失的credit或debit字段用0填充,最终得到如下结果:
json_final = [ {'purchasedPerson__id': 2, 'credit': 3000 , 'debit':0}, {'purchasedPerson__id': 4, 'credit': 5000 , 'debit':2000}, {'purchasedPerson__id': 1, 'credit':0, 'debit': 8526} ]
解决方案(Python实现)
可以通过字典作为中间容器聚合数据,按ID分组后统一补全字段,具体步骤如下:
- 创建空字典,用于存储每个ID对应的聚合数据,默认给每个ID设置
credit和debit为0 - 遍历第一个列表,更新对应ID的
credit值 - 遍历第二个列表,更新对应ID的
debit值 - 将字典中的值转换为列表,得到最终结果
代码示例:
json_1 = [{'purchasedPerson__id': 2, 'credit': 3000}, {'purchasedPerson__id': 4, 'credit': 5000}] json_2 = [{'purchasedPerson__id': 1, 'debit': 8526}, {'purchasedPerson__id': 4, 'debit': 2000}] # 初始化聚合字典 aggregated = {} # 处理第一个列表的credit数据 for item in json_1: person_id = item['purchasedPerson__id'] aggregated[person_id] = {'purchasedPerson__id': person_id, 'credit': item['credit'], 'debit': 0} # 处理第二个列表的debit数据 for item in json_2: person_id = item['purchasedPerson__id'] if person_id in aggregated: aggregated[person_id]['debit'] = item['debit'] else: aggregated[person_id] = {'purchasedPerson__id': person_id, 'credit': 0, 'debit': item['debit']} # 转换为最终列表 json_final = list(aggregated.values()) print(json_final)
运行这段代码即可得到预期的合并结果,该方法时间复杂度为O(n+m)(n和m分别为两个列表的长度),效率较高,能灵活处理ID不重叠的场景。
内容的提问来源于stack exchange,提问作者ClownBunny
相关产品推荐
相关产品推荐

