Python 如何检查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': [

我需要验证另一个dict是否是另一个dict的子集,在这些dict中有一个dict数组的技巧

超集:

   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

您从哪一行收到错误消息?