Python比较字典形式的列表是否部分相等

2019-09-27  本文已影响0人  天雨流芳hodo

在工作中遇到有两个字典形式的列表list1、list2

list1 = [{"ID":"vat_invoice_type","value":"非电子发票","confidence":1.0,"position":""},
         {"ID":"vat_invoice_page_number","value":"发票联","confidence":0.97,"position":""},
         {"ID":"vat_invoice_cipher_field","value":"test1","confidence":0.98,"position":""},
         {"ID":"vat_invoice_drawer","value":"巧","confidence":0.95,"position":""}]
list2 = [{"value":"非电子发票","description":"发票类型","position":[],"ID":"vat_invoice_type"},
         {"value":"发票联","description":"发票联","position":[1433],"ID":"vat_invoice_page_number"},
         {"value":"test2","description":"密码区","position":[1020],"ID":"vat_invoice_cipher_field"}]

需求是当两个列表有共同ID时,比较对应value的值是否相等

1、首先找到共同ID

list1_keys = []
list2_keys = []
# 提取list1所有ID的值
for i in list1:
    key = i["ID"]
    list1_keys.append(key)
print(list1_keys)

# 提取list2所有ID的值
for i in list2:
    key = i["ID"]
    list2_keys.append(key)
print(list2_keys)

# 提取list1、list2的共同ID
common_keys = [x for x in list1_keys if x in list2_keys]
print(common_keys)

运行后提取到的共同ID结果:

['vat_invoice_type', 'vat_invoice_page_number', 'vat_invoice_cipher_field']

2、循环,根据共同ID查找字典中对应value的值

# 比较共同ID对应字典中value的值是否相等
for i in common_keys:
    for dict1 in list1:
        if dict1["ID"] == i:
            list1_value = dict1["value"]
            break

    for dict2 in list2:
        if dict2["ID"] == i:
            list2_value = dict2["value"]
            break

    if list1_value == list2_value:
        print("该ID %s对应的value %s %s 相等" % (i,list1_value,list2_value))
    else:
        print("该ID %s对应的value %s %s不相等" % (i,list1_value,list2_value))

运行结果:

该ID vat_invoice_type对应的value 非电子发票 非电子发票 相等
该ID vat_invoice_page_number对应的value 发票联 发票联 相等
该ID vat_invoice_cipher_field对应的value test1 test2不相等
上一篇 下一篇

猜你喜欢

热点阅读