如何实现递归校验一个字典是否为另一个字典的子集?
递归检查字典是否为另一个字典的子集(内置类型场景)
我之前碰到过一模一样的需求:要递归验证一个字典是否是另一个字典的子集,而且两个字典里的元素全是Python内置类型。之前看到过讨论类似问题的帖子,但里面的所有答案都没法完全匹配我的需求,所以我自己写了一个目前运行正常的递归函数,分享给大家:
def is_subset_dict(subset, superset): # 处理非字典的基础类型直接比较 if not isinstance(subset, dict) or not isinstance(superset, dict): return subset == superset # 遍历子集的每一个键值对 for key, sub_val in subset.items(): # 超集里没有这个键,直接不满足子集条件 if key not in superset: return False # 递归检查嵌套的字典结构 if not is_subset_dict(sub_val, superset[key]): return False # 所有键值对都匹配,返回True return True
函数逻辑说明
- 先判断传入的参数是否为字典:如果是基础类型(比如int、str、list、tuple这类),直接比较值是否相等
- 如果是字典,先检查子集的每个键是否都存在于超集中
- 对每个键对应的 value,递归调用函数,确保嵌套的多层字典也能被正确验证
目前这个函数对于常规的内置类型嵌套场景都能正常工作,不过我还在优化边缘情况的处理(比如空字典、值为None的场景),但基础的递归子集验证需求已经完全能覆盖了。
内容的提问来源于stack exchange,提问作者BPL
相关产品推荐
相关产品推荐

