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

如何对比两个嵌套字典,仅提取彼此缺失的键?

嵌套字典缺失键对比方案

你的代码目前会把缺失键对应的值也存入结果,要只保留键的完整路径,只需调整存储逻辑;如果需要双向找出两个字典互相缺失的键,可以参考以下实现:

完整双向对比代码

def find_missing_keys(json1, json2):
    # 辅助函数:递归获取字典所有键的完整路径
    def get_full_key_paths(d, parent_path=""):
        key_paths = []
        for key, value in d.items():
            current_path = f"{parent_path}.{key}" if parent_path else key
            key_paths.append(current_path)
            if isinstance(value, dict):
                key_paths.extend(get_full_key_paths(value, current_path))
        return key_paths

    # 获取两个字典的所有键路径
    all_keys_json1 = get_full_key_paths(json1)
    all_keys_json2 = get_full_key_paths(json2)

    # 分别计算互相缺失的键
    missing_in_json1 = [key for key in all_keys_json2 if key not in all_keys_json1]
    missing_in_json2 = [key for key in all_keys_json1 if key not in all_keys_json2]

    return {
        "missing_in_json1": missing_in_json1,
        "missing_in_json2": missing_in_json2
    }

单向对比(仅找json1缺失的键)

如果只需要找出json2中存在但json1中没有的键,修改你原有的代码即可:

def find_missing_in_json1(json1, json2, path=""):
    missing_keys = []
    for key, value in json2.items():
        current_path = f"{path}.{key}" if path else key
        if key not in json1:
            missing_keys.append(current_path)
        elif isinstance(value, dict) and isinstance(json1[key], dict):
            missing_keys.extend(find_missing_in_json1(json1[key], value, current_path))
    return missing_keys

改动说明

  • 去掉了原代码中存储值的逻辑,改为只收集键的完整路径
  • 双向对比方案通过先提取所有键路径再做差集,逻辑更清晰,也避免了重复递归
  • 返回结果仅包含缺失键的路径,完全符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:40:43