比较两个字典并更新第一个字典中的值

我对 python dict update 有疑问。我有两个字典,如下所述。


    dict1={1:{"partname": 'part1_item1' , 'archname':'sca_item1_rev1.0.jar','rev: '1.0', 'compname': item1},

           2:{"partname": 'part1_item2' , 'archname':'sca_item2_rev2.0.jar','rev: '2.0' ,'compname': item2},

           3:{"partname": 'part1_item3' , 'archname':'sca_item3_rev2.0.jar','rev: '2.0' ,'compname': item3}}

           

    dict2={item1:{'jarversion': '1.0', 'jarname':'item1', 'partition': 'item1'},

           item2:{'jarversion': '1.0', 'jarname':'item2', 'partition': 'item2'},

           item1:{'jarversion': '2.0', 'jarname':'item3', 'partition': 'item3'}}

    

我想比较 dict1 和 dict2 的值(rev 和 jarname),如果 jatname 和 jar 版本相同,那么我需要在 dict1 中更新为 'overwrite': 'true'


如果两个版本不相同并且找不到版本,我需要在 dict1 中使用 'overwrite': 'false' 进行更新


尝试使用 dict1 创建代码,如下所述


i=1

for root, dirs, files in os.walk(comp):

    if files:

        if i not in dict1.keys():

            dict1[i] = {}

        if '\\' in root:

            subdir=root.split('\\')[1]

        else:

            subdir=''

        dict1[i].update({"partname" : '', "archname": '', "compname":'', "rev": ''})

        if subdir:

            dict1[i].update({"partname" : '%s'%subdir })

            dict1[i].update({"archname": '', "compname":'', "rev": ''})

        for filename in files:

            if filename.endswith('.jar'):

                dict1[i].update({"archname": '%s'%filename,"compname": ('%s' %filename).split('sca_')[1].split('_rev')[0],"rev": ('%s' %filename).split('sca_')[1].split('_rev')[1].split('.jar')[0]})

            else:

                print("Unrecognised file: %s"%(filename))

        i=i+1


dict2 已经创建。

守候你守候我
浏览 91回答 1
1回答

慕森王

让我们试试这个,# create a look-up set for unique (jarname + jarversion)look_up = {v['jarname'] + v['jarversion'] for k, v in dict2.items()}# use dict-comprehension for updating the values back to dict1print(    {k: {**v, **{"overwrite": v['compname'] + v['rev'] in look_up}}     for k, v in dict1.items()})编辑,旧版本的 pythonlook_up = set()for _, v in dict2.items():    look_up.add(v['jarname'] + v['jarversion'])for k, v in dict1.items():    dict1[k].update(        {"overwrite": str(v['compname'] + v['rev'] in look_up).lower()}    )
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python