gpt4 book ai didi

python - 检查字典是否是另一个字典的子集的递归函数

转载 作者:行者123 更新时间:2023-11-30 22:18:16 30 4
gpt4 key购买 nike

我想递归地检查一个字典是否是另一个字典的子集。我们假设两个字典都有内置类型作为项目。

我看到已经有一个非常旧的线程 Python: Check if one dictionary is a subset of another larger dictionary试图解决类似但不完全的问题...因为那里的答案都不能满足我的目的,所以我决定发布我自己的solution在那里,但它仍然不完全完整,下面的函数在几乎所有情况下都可以正常工作,但在子集具有超集中不存在的值的情况下,它会严重失败,即:

def is_subset(superset, subset):
for key, value in superset.items():
if key not in subset:
continue

if isinstance(value, dict):
if not is_subset(value, subset[key]):
return False
elif isinstance(value, str):
if not subset[key] in value:
return False
elif isinstance(value, list):
if not set(subset[key]) <= set(value):
return False
elif isinstance(value, set):
if not subset[key] <= value:
return False
else:
if not subset[key] == value:
return False

return True

superset = {'question': 'mcve', 'metadata': {}}
subset = {'question': 'mcve', 'metadata': {'author': 'BPL'}}

print(is_subset(superset, subset))

该函数返回 True,但它应该返回 False。那么,您将如何解决它?

最佳答案

你的代码逻辑颠倒了。请注意如何获取超集中的每个元素,并在它们不在子集中时继续。您想要做的是获取子集中中的每个元素并检查它们是否位于超集中

这是您代码的固定版本。

def is_subset(superset, subset):
for key, value in subset.items():
if key not in superset:
return False

if isinstance(value, dict):
if not is_subset(superset[key], value):
return False

elif isinstance(value, str):
if value not in superset[key]:
return False

elif isinstance(value, list):
if not set(value) <= set(superset[key]):
return False
elif isinstance(value, set):
if not value <= superset[key]:
return False

else:
if not value == superset[key]:
return False

return True

以下是给出正确结果的函数的一些示例。

superset = {'question': 'mcve', 'metadata': {}}
subset = {'question': 'mcve', 'metadata': {'author': 'BPL'}}

is_subset(superset, subset) # False

superset = {'question': 'mcve', 'metadata': {'foo': {'bar': 'baz'}}}
subset = {'metadata': {'foo': {}}}

is_subset(superset, subset) # True

superset = {'question': 'mcve', 'metadata': {'foo': 'bar'}}
subset = {'question': 'mcve', 'metadata': {}, 'baz': 'spam'}

is_subset(superset, subset) # False

关于python - 检查字典是否是另一个字典的子集的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49419486/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com