比较两个不均匀的列表包括在python中具有唯一键的字典和在a中但不在b中搜索键值的字典

2024-04-20 08:50:55 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我还处在python的学习阶段,正在字典列表中寻找帮助

在字典a1和p1的两个列表中,我们试图取出a1中存在但p1中不存在的“代码”,如果代码存在而不是p1,那么它的IsRemoved值应该为0,即[IsRemoved]==0

a1 = [{'Code': '1', 'Name': 'ven1', 'DomainName': 'xyz.com', 'IsRemoved': 0}, {'Code': '2', 'Name': 'ven2', 'DomainName': 'abc.co.in', 'IsRemoved': 1}, {'Code': '3', 'Name': 'ven3', 'DomainName': 'abc.com', 'IsRemoved': 0}, {'Code': 'v001', 'Name': 'ven1', 'DomainName': 'xyz.com|abc.com', 'IsRemoved': 0},{'Code': '4', 'Name': 'ven4', 'DomainName': 'xyz.com', 'IsRemoved': 0}, {'Code': '5', 'Name': 'ven5', 'DomainName': 'abc.com', 'IsRemoved': 0}, {'Code': '6', 'Name': 'ven6', 'DomainName': 'xyz.com', 'IsRemoved': 0}, {'Code': '7', 'Name': 'ven7', 'DomainName': 'xyz.com', 'IsRemoved': 1}, {'Code': '8', 'Name': 'ven8', 'DomainName': 'abc.co.in', 'IsRemoved': 0}, {'Code': '9', 'Name': 'ven9', 'DomainName': 'xyz.com', 'IsRemoved': 1}, {'Code': '10', 'Name': 'ven10', 'DomainName': 'xyz.com', 'IsRemoved': 0}, {'Code': '11', 'Name': 'ven6', 'DomainName': 'xyz.com', 'IsRemoved': 0}, {'Code': 'v001', 'Name': 'ven1', 'DomainName': 'xyz.com|abc.com', 'IsRemoved': 1}, {'Code': 'v002', 'Name': 'ven2', 'DomainName': 'xyz.com|abc.com', 'IsRemoved': 0}]
    
p1 = [{'Code': '1', 'Name': 'ven1', 'Domain': ['xyz.com']}, {'Code': '2', 'Name': 'ven2', 'Domain': ['abc.co.in']}, {'Code': '3', 'Name': 'ven3', 'Domain': ['abc.com']}, {'Code': '4', 'Name': 'ven4', 'Domain': ['xyz.com']}, {'Code': '5', 'Name': 'ven5', 'DomainName': 'abc.com' ]

因此,这里我希望输出为:

{'Code': 'v001', 'Name': 'ven1', 'DomainName': 'xyz.com|abc.com', 'IsRemoved': 0}
{'Code': '6', 'Name': 'ven6', 'DomainName': 'xyz.com', 'IsRemoved': 0}
{'Code': '8', 'Name': 'ven8', 'DomainName': 'abc.co.in', 'IsRemoved': 0}
{'Code': '10', 'Name': 'ven10', 'DomainName': 'xyz.com', 'IsRemoved': 0}
{'Code': '11', 'Name': 'ven6', 'DomainName': 'xyz.com', 'IsRemoved': 0}
{'Code': 'v002', 'Name': 'ven2', 'DomainName': 'xyz.com|abc.com', 'IsRemoved': 0}

我用for loop和!=以以下方式:

for x in a1:
    for y in p1:
        if x["Code"] != y["Code"] and x["IsRemoved"] == 0:
            print(x)

当我试图查找==它工作正常,并给我正确的结果,但奇怪的是,它不能正常工作!=

请看一看,如果我可以使用一些其他方法来获得所需的结果指导


Tags: nameincomdomaina1codeabcco
1条回答
网友
1楼 · 发布于 2024-04-20 08:50:55

下面是您可以尝试的方法,从p1创建唯一代码&;使用列表理解在a1上应用筛选器

unique = {p['Code'] for p in p1} # use set for faster lookup

[a for a in a1 if a['Code'] not in unique and a['IsRemoved'] == 0]

相关问题 更多 >