【发布时间】:2018-08-31 08:23:06
【问题描述】:
我想递归地检查一个字典是否是另一个字典的子集。让我们假设两个字典都有内置类型作为项目。
我已经看到已经有一个非常古老的线程 Python: Check if one dictionary is a subset of another larger dictionary 试图解决类似但不完全的问题......因为那里的答案都不能满足我的目的,所以我决定发布我自己的 @987654322 @ 在那里,但它仍然没有完全完成,下面的函数在几乎所有情况下都可以正常工作,但在子集具有超集中不存在的值的情况下,它会惨遭失败,即:
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。那么,你将如何解决它?
【问题讨论】:
-
值是子字符串是可以接受的,对吗?
-
如果 value 是一个字符串,你希望你的子集字典是一个子字符串,当你在 value 中使用 subset[key] 时,是正确的行为
标签: python dictionary