亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

比較兩個字典并更新第一個字典中的值

比較兩個字典并更新第一個字典中的值

守候你守候我 2023-03-16 09:13:32
我對 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=1for 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+1dict2 已經創建。
查看完整描述

1 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

讓我們試試這個,


# 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 dict1

print(

    {k: {**v, **{"overwrite": v['compname'] + v['rev'] in look_up}}

     for k, v in dict1.items()}

)

編輯,舊版本的 python


look_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()}

    )


查看完整回答
反對 回復 2023-03-16
  • 1 回答
  • 0 關注
  • 85 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號