Python中如何高效检查两个字典对应值的类型是否一致?
嵌套字典通用类型对比实现
你当前逐键硬编码判断的方式仅适配固定结构的字典,一旦字典新增字段、嵌套层级变化就需要改写判断条件,维护成本很高,可以通过递归遍历的方式实现通用校验,完全覆盖你当前的判断逻辑,同时适配任意结构的同构字典。
核心实现代码
def check_type_match(a, b, check_list_inner=True): # 首先校验两个对象自身类型是否一致 if type(a) != type(b): return False # 字典类型:递归校验所有键对应的值 if isinstance(a, dict): # 校验两边键集合完全一致,避免漏键/多键问题 if a.keys() != b.keys(): return False for k in a: if not check_type_match(a[k], b[k], check_list_inner): return False return True # 列表/元组类型:按需校验内部元素 if check_list_inner and isinstance(a, (list, tuple)): # 先校验容器长度一致 if len(a) != len(b): return False # 递归校验对应位置元素类型匹配 for item_a, item_b in zip(a, b): if not check_type_match(item_a, item_b, check_list_inner): return False # 对齐你原逻辑:校验单个列表内所有元素类型统一 if len(a) > 0: first_item_type = type(a[0]) if not all(type(x) is first_item_type for x in a): return False return True # int、float、str等基础类型,前面类型校验通过即可直接返回 return True
调用方式
直接传入两个待校验的字典即可,函数返回True代表所有对应位置类型完全符合要求,返回False代表存在类型不匹配问题:
a = {"a": 1, "b": 2, "c":4.5, "d":[1,2], "e":"string", "f":{"f1":0.0, "f2":1.5}} b = {"a": 10, "b": 20, "c":3.5, "d":[0,2,4], "e":"q", "f":{"f1":1.0, "f2":0.0}} if check_type_match(a, b): # 类型校验通过后执行你的业务逻辑 pass
方案优势
- 通用性强:不管字典嵌套多少层、包含多少字段,都不需要手动编写逐键判断逻辑
- 性能无损耗:遍历逻辑和手动硬编码完全一致,都是遍历所有结构节点,没有额外开销
- 逻辑对齐原生需求:完全覆盖你原代码中列表内部元素类型统一的校验要求,不需要单独为列表字段写特殊判断
- 配置灵活:如果不需要校验列表内部元素类型,调用时传入
check_list_inner=False即可关闭对应校验规则 - 鲁棒性更强:新增了键集合一致性、列表长度一致性校验,避免两边结构不一致时抛出隐式异常
内容的提问来源于stack exchange,提问作者f. c.
相关产品推荐
相关产品推荐

