Python 如何检查dict是否是另一个复杂dict的子集
我需要验证另一个dict是否是另一个dict的子集,在这些dict中有一个dict数组的技巧 超集:Python 如何检查dict是否是另一个复杂dict的子集,python,dictionary,Python,Dictionary,我需要验证另一个dict是否是另一个dict的子集,在这些dict中有一个dict数组的技巧 超集: dct_1 = { 'x': 'x', 'y': [ { 't': '123', 'a': 'a' } ] } 子集: dict_2 = { 'x': 'x', 'y': [
dct_1 = {
'x': 'x',
'y': [
{
't': '123',
'a': 'a'
}
]
}
子集:
dict_2 = {
'x': 'x',
'y': [
{
't': '123'
}
]
}
从回答中,我得到以下错误:
TypeError: unhashable type: 'dict'
我的代码:
def是_子集(超集,子集):
对于键,子集.items()中的值:
如果键不在超集中:
返回错误
如果isinstance(值,dict):
如果不是_子集(超集[key],值):
返回错误
elif isinstance(值,str):
如果值不在超集[键]中:
返回错误
elif isinstance(值、列表):
如果不设置(值)这里有一种方法,它对您的用例来说足够了吗
def是_子集(超集,子集):
如果类型(超集)!=类型(子集):
返回错误
如果存在(子集,dict):
对于键,子集.items()中的值:
尝试:
如果不是_子集(超集[key],值):
返回错误
除KeyError外:
返回错误
elif isinstance(子集,列表):
对于zip中的sub_e、super_e(子集、超集):
如果不是子集合(超级、子集合):
返回错误
其他:
如果超集!=子集:
返回错误
返回真值
is_子集(dict_1,dict_2)
#真的
您可以遍历复杂字典,并在每个阶段尝试将当前字典与潜在子集字典匹配:
def d_eq(d, d1):
if not isinstance(d, (dict, list)):
return d == d1
if isinstance(d, list):
return all(d_eq(a, b) for a, b in zip(d, d1))
return all(d.get(i) == d1[i] or d_eq(d.get(i), d1[i]) for i in d1)
def is_sub(d, d1):
if isinstance(d, list):
return any(is_sub(i, d1) for i in d)
return d_eq(d, d1) or (isinstance(d, dict) and any(is_sub(b, d1) for b in d.values()))
print(is_sub(dct_1, dict_2))
输出:
True
您从哪一行收到错误消息?