为了账号安全,请及时绑定邮箱和手机立即绑定

迭代 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 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号