比较两个dict值并在dict中更新

2024-09-30 01:22:17 发布

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

我有一个问题要比较两个字典的值。我正在比较两个dict上的“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'

有人能帮我吗


Tags: inforifvalueresvaljarprint
2条回答

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关联的值。由于字典没有该键,因此会抛出一个错误。如上所示,val的唯一有效键是partition_namejar

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.jar','overwrite':'false'},{'jarversion':'2.0','jarname':'jar2.jar','overwrite':'true'}]}

相关问题 更多 >

    热门问题