比较两个字典值并更新字典

时间:2020-07-21 19:01:35

标签: python dictionary

我有疑问要比较两个字典之间的价值。我在两个字典上都与“ jarname”“ jarverion”进行比较。如果相同,如果版本不同,则需要在dict1部分更新为“ true”。我需要在dict1.Overwrite部分将false设置为


dict2={'partname1': { 'jarversion':'1.0','jarname':'jar1.jar'},'partname2': { 'jarversion':'2.0','jarname':'jar2.jar'},'partname3': {'jarversion': '3.0','jarname':'jar3.jar'}}


dict1={1:{'partition_name' : 'avs', 'jar':[{'jarversion':'1.0','jarname':'jar1.jar'},{'jarversion':'5.0','jarname':'jar5.jar'}]},2:{'partition_name' : 'ivs', 'jar':[{'jarversion':'4.0','jarname':'jar4.jar'},{'jarversion':'2.0','jarname':'jar2.jar'}],}}

我使用下面的代码将dict1“ jarverion”“ jarname”与dict2 dict进行比较。


res=[]
for _, v in dict2.items():
    res.append(v['jarname'] + v['jarversion'])


def cmp_value( rstring='',lstring=''):
    print('rstring',rstring)
    print('lstring',lstring)
    if rstring == lstring:
        return True
    else:
        return False
for key, val in dict1.items():
        print(val)
        for eachval in res:
            if cmp_value(eachval, "%s%s"%(val['jarname'], val['jarversion'])):
                dict1[key].update({"overwrite": "true"})
                break
            else:
                dict1[key].update({"overwrite": "false"})

print (dict1)

但是此代码不起作用,我正在得到

if cmp_value(eachval, "%s%s"%(val['jarname'], val['jarversion'])):
KeyError: 'jarname'

任何人都可以在这里帮助我。

2 个答案:

答案 0 :(得分:0)

dict2 = {'partname1': {'jarversion': '1.0', 'jarname': 'jar1.jar'},
         'partname2': {'jarversion': '2.0', 'jarname': 'jar2.jar'},
         'partname3': {'jarversion': '3.0', 'jarname': 'jar3.jar'}}

dict1 = {1: {'partition_name': 'avs',
             'jar': [{'jarversion': '1.0', 'jarname': 'jar1.jar'}, {'jarversion': '5.0', 'jarname': 'jar5.jar'}]},
         2: {'partition_name': 'ivs',
             'jar': [{'jarversion': '4.0', 'jarname': 'jar4.jar'}, {'jarversion': '2.0', 'jarname': 'jar2.jar'}], }}

res = []
for _, v in dict2.items():
    res.append(v['jarname'] + v['jarversion'])


def cmp_value(rstring='', lstring=''):
    # print('rstring', rstring)
    # print('lstring', lstring)
    if rstring == lstring:
        return True
    else:
        return False


for key, val in dict1.items():
    for eachval in res:
        for i in val['jar']:
            if cmp_value(eachval, "%s%s" % (i['jarname'], i['jarversion'])):
                i['overwrite'] = 'true'
                break
            else:
                if 'overwrite' not in i:
                    i['overwrite'] = 'false'

print(dict1)

输出:{1:{'partition_name':'avs','jar':[{'jarversion':'1.0','jarname':'jar1.jar','overwrite':'true'}, {'jarversion':'5.0','jarname':'jar5.jar','overwrite':'false'}]}},2:{'partition_name':'ivs','jar':[{'jarversion' :'4.0','jarname':'jar4.jar','overwrite':'false'},{'jarversion':'2.0','jarname':'jar2.jar','overwrite':'true' }]}}

答案 1 :(得分:0)

class Contract { public Contract() { } public string ContractID; public string Type; public string Trader; public DateTime EntryDate; public string BuyerCo; public string SellerCo; public string BuyerTrader; public string SellerTrader; public List<ProductDetail> Details = new List<ProductDetail>(); public class ProductDetail { public ProductDetail() { } public string Product; public DateTime StartDate; public DateTime EndDate; public string Rin; public string Qunatity; public string DeliveryLocation; public string State; public string DeliveryMethod; public string Terms; public string Price; public string Notes; internal string Matches; } } 行遍历键(整数)和值(字典)的元组。

在产生错误的行中,在for key, val in dict1.items()的情况下,key=1的内容如下:

val

您正在要求此字典返回与键{ 'partition_name' : 'avs', 'jar': [ {'jarversion': '1.0', 'jarname': 'jar1.jar'}, {'jarversion':'5.0','jarname':'jar5.jar'} ] } 相关的值。由于字典没有该键,因此会引发错误。如上所示,jarname的唯一有效键是valpartition_name