gpt4 book ai didi

python - 迭代 2 个字典并比较值然后附加内部列表

转载 作者:行者123 更新时间:2023-12-04 09:45:07 25 4
gpt4 key购买 nike

我面临一种情况,我需要使用相同的最外层键迭代嵌套的 dict,将内部键值与其他 dict 的内部键值进行比较,然后追加。下面将有助于理解:

{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)

最佳答案

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)

关于python - 迭代 2 个字典并比较值然后附加内部列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62165669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com