比较两个字典值并更新字典 [英] compare two dict values and update in dict

查看:104
本文介绍了比较两个字典值并更新字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have question to compare value between two dicts. I am comparing with "jarname""jarverion" on both dict. If its same , i need to update as "true" in dict1 section if its different version , i need to set false in dict1.Overwrite section.


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

I comparing dict1 "jarverion""jarname" with dict2 dict using below code.


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)

但是此代码不起作用,我正在获取

But this code is not working , i am getting

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

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

Can anyone help me here.

推荐答案

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 '}]}}

output: {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'}]}}

这篇关于比较两个字典值并更新字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆