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

如何基于共同键(id、utt)合并两个JSON文件?

合并两个JSON文件的解决方案

步骤说明

  1. 预处理第二个文件数据:把第二个文件的结构转换成{对话id: {utt文本: number值}}的字典,这样能快速通过id和utt找到对应的number,避免嵌套循环的低效查找。
  2. 遍历第一个文件并合并:逐个处理第一个文件的每个对话条目,根据id找到对应的utt映射,再给每个data项添加匹配到的number字段,匹配失败则跳过。

代码实现

import json

# 假设你已经用json.load()加载了两个文件,分别是data1(第一个文件)和data2(第二个文件)
# 示例加载代码:
# with open('file1.json', 'r', encoding='utf-8') as f:
#     data1 = json.load(f)
# with open('file2.json', 'r', encoding='utf-8') as f:
#     data2 = json.load(f)

# 构建第二个文件的映射表
id_utt_number_map = {}
for dialog in data2:
    dialog_id = dialog['id']
    utt_map = {}
    for item in dialog['data']:
        utt = item['utt']
        number = item['number']
        utt_map[utt] = number
    id_utt_number_map[dialog_id] = utt_map

# 遍历第一个文件,合并数据
for dialog in data1:
    dialog_id = dialog['id']
    # 跳过第二个文件中不存在的对话id
    if dialog_id not in id_utt_number_map:
        continue
    utt_map = id_utt_number_map[dialog_id]
    # 给匹配到的条目添加number字段
    for item in dialog['data']:
        utt = item['utt']
        if utt in utt_map:
            item['number'] = utt_map[utt]

# 保存合并后的结果(可选)
# with open('merged.json', 'w', encoding='utf-8') as f:
#     json.dump(data1, f, indent=2, ensure_ascii=False)

代码解释

  • 映射表构建:通过一次遍历把第二个文件的对话id和对应的utt-number关系存起来,后续查找时间复杂度为O(1),数据量大时效率远高于嵌套循环。
  • 匹配逻辑:仅处理第二个文件中存在的对话id,且只给第一个文件中能匹配到utt的条目添加number字段,严格符合“跳过匹配失败条目”的要求。
  • 灵活修改:代码直接在第一个文件的原数据上修改,若不想改动原数据,可先用copy.deepcopy(data1)创建深拷贝后再操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:35:24