You need to enable JavaScript to run this app. Python 如何校验列表所有值是否存在于嵌套字典的Id字段中
优惠活动
大模型
产品
解决方案
定价
更多

Python 如何校验列表所有值是否存在于嵌套字典的Id字段中

嵌套字典ID字段与目标列表匹配校验实现方案

原代码存在的核心问题

  • 变量命名冲突:直接使用Python内置类型名dict、list作为自定义变量,会覆盖内置类型,引发后续异常
  • 遍历逻辑错误:len()返回整数类型,不支持迭代,原代码for abc in leng的写法运行时会直接抛出类型错误
  • 字段名大小写不匹配:嵌套字典中存储的是首字母大写的Id字段,代码中错写为小写id,会触发键不存在的KeyError
  • 语法结构缺失:原嵌套字典中"y"列表结束后与"z"键之间缺少逗号,整个字典结构无法正常解析
  • 逻辑副作用:直接对外部传入的待校验列表执行pop操作,会污染原列表对象,影响后续业务逻辑
  • 鲁棒性不足:没有处理节点缺失Id字段的边界情况,遇到结构不完整的子项会直接崩溃

优化后实现逻辑

核心思路为将目标路径下所有存在的Id值提取为集合,利用集合的O(1)查找效率完成批量匹配,全程不修改外部传入的原对象,逻辑无副作用。

# 修正语法与命名后的基础数据
nested_data = {
    "x": {
        "y": [
            {
                "Id": "AB",
                "Name": "C D E",
                "cat": ["cat"],
                "stat": "NO",
                "count1": 0,
                "count2": 0,
                "results": []
            },
            {
                "Id": "CD",
                "sourceName": "FGE",
                "cat": [],
                "stat": "NO",
                "count1": 0,
                "count2": 0,
                "results": []
            }
        ],
        "z": [
            {
                "Id": "YC",
                "Name": "C D E",
                "cat": ["cat"],
                "stat": "NO",
                "count1": 0,
                "count2": 0,
                "results": []
            },
            {
                "Id": "PO",
                "sourceName": "FGE",
                "cat": [],
                "stat": "NO",
                "count1": 0,
                "count2": 0,
                "results": []
            }
        ]
    }
}

target_check_list = ['AB', 'CD']

def validate_id_match(data: dict, check_list: list) -> str:
    # 提取目标路径下所有子项的Id值,跳过缺失Id字段的节点
    exist_ids = {item["Id"] for item in data["x"]["y"] if "Id" in item}
    # 逐个校验待匹配列表的元素
    for id_val in check_list:
        if id_val not in exist_ids:
            return "Not OK"
    return "OK"

# 测试调用
if __name__ == "__main__":
    result = validate_id_match(nested_data, target_check_list)
    print(result)

方案说明

  • 函数支持传入自定义的字典与待校验列表,不依赖全局变量,可直接复用
  • 采用集合存储已存在的Id值,相比列表遍历的时间复杂度更低
  • 兼容子项缺失Id字段的异常场景,不会因为单个节点结构不全触发崩溃
  • 全程不修改原列表、原字典的内容,无业务副作用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 06:15:05