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

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

迭代 2 個字典并比較值然后附加內部列表

迭代 2 個字典并比較值然后附加內部列表

慕哥9229398 2022-12-20 15:09:55
我面臨這樣一種情況,我需要使用相同的最外層鍵迭代嵌套字典,將內部鍵值與其他字典的內部鍵值進行比較,然后追加。下面將有助于理解:{AD:{(62,'VMX','Barcelona','ES'): ['123','567','666'}} #dict1  many more rows{AD:{(151,'CMXS','','ES','62'): ['345','6754']}}       #dict 2 many more rows所以我需要迭代兩個字典,比較 dict1 的元組鍵 [0] == dict2 的元組鍵 [4],如果它們匹配 dict1 中的追加內部列表和 dict2 中的內部列表。在這個 dict1 看起來像之后{AD:{(62,'VMX','Barcelona','ES'): ['123','567','666','345','6754'}}寫了這段代碼,但沒有按預期工作for k,v in dict1.items():    if len(v)!= 0:        for c,a in dict2.items():            if len(a)!= 0:                for k2,v2 in v.items():                    for c2,a2 in a.items():                        if str(k2[0]) == c2[4]:                            v2.append(a2)
查看完整描述

2 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

dict1 = {"AD":{(62,'VMX','Barcelona','ES'): ['123','567','666']}} #dict1  many more rows


dict2 = {"AD":{(151,'CMXS','','ES','62'): ['345','6754']}}       #dict 2 many more rows


# create a simplified map of dict2

dict3 = {}

for outer_key, outer_value_dict in dict2.items():

    for inner_key_tuple, inner_value_list in outer_value_dict.items():

        new_key = (outer_key, inner_key_tuple[4]) # e.g. (AD, 62)

        dict3.setdefault(new_key, []).extend(inner_value_list)


# now modify dict1 using dict3 instead of dict2

for outer_key, outer_value in dict1.items():

    for inner_key_tuple, inner_value_list in outer_value.items():

        lookup_key = (outer_key, str(inner_key_tuple[0]))

        # search dict3 using the lookup_key.

        # if not present, get will return an empty list

        list_to_extend = dict3.get(lookup_key, [])

        inner_value_list.extend(list_to_extend)


print(dict1)

輸出


/tmp $ python test.py.py

{'AD': {(62, 'VMX', 'Barcelona', 'ES'): ['123', '567', '666', '345', '6754']}}

根據評論,因為您想知道如何避免其中一個循環 - 這是更新版本


for k,v in dict1.items():

    a = dict2.get(k)

    if a is None or len(v) == 0:

        continue


    for k2,v2 in v.items():

        for c2,a2 in a.items():

            if str(k2[0]) == c2[4]:

                v2.append(a2)



查看完整回答
反對 回復 2022-12-20
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

只要示例進行,for 循環就會被正確放置。

出乎意料是什么意思?你是這個意思嗎?

{'AD': {(62, 'VMX', 'Barcelona', 'ES'): ['123', '567', '666', ['345', '6754']]}}

數組中的那個額外數組?

因為如果是這樣,答案就是用 .extend() 切換 .append()


查看完整回答
反對 回復 2022-12-20
  • 2 回答
  • 0 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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