检查字典列表中的一组 key/values 是否在另一个列表中

Check if a set of key/values in dict list is in another list

我有一个列表如下:

[
  {
   'Name': 'Name1',
   'Address': 'Address1'
  },
 {
   'Name': 'Name2',
   'Postcode': 'MyPostcode'
  }
]

还有一个这样的列表:

  [
    {
    'Name': 'Name1', 
    'data' : {
    'Address': 'Address1', 
    'Postcode': 'Whatever'
    },
   {
    'Name': 'Name2', 
    'data' : {
    'Address': 'Whatever', 
    'Postcode': 'MyPostcode'
    },
   {
    'Name': 'Name3', 
    'data' : {
    'Address': 'Whatever', 
    'Postcode': 'Whatever'
    },
    ] 

对于第一个列表中的任何项目,我需要检查 key/value 的组合是否存在于第二个列表中,如果存在,则将其从第二个列表中删除

我可以用多行代码,使用不同的 for 循环,但可能有更明智的方法。谁能提出一个优雅的解决方案?

在上面的例子中,它应该从列表中删除前两个字典和 return 一个只有第三个字典的列表

       [
{
    'Name': 'Name3', 
    'data' : {
    'Address': 'Whatever', 
    'Postcode': 'Whatever'
    }
    ] 

谢谢

尝试:

lst1 = [
    {"Name": "Name1", "Address": "Address1"},
    {"Name": "Name2", "Postcode": "MyPostcode"},
]

lst2 = [
    {"Name": "Name1", "data": {"Address": "Address1", "Postcode": "Whatever"}},
    {
        "Name": "Name2",
        "data": {"Address": "Whatever", "Postcode": "MyPostcode"},
    },
    {"Name": "Name3", "data": {"Address": "Whatever", "Postcode": "Whatever"}},
]

out = []
for d2 in lst2:
    t = set({"Name": d2["Name"], **d2["data"]}.items())
    for d1 in lst1:
        if t.issuperset(d1.items()):
            break
    else:
        out.append(d2)

print(out)

打印:

[{'Name': 'Name3', 'data': {'Address': 'Whatever', 'Postcode': 'Whatever'}}]