【发布时间】:2023-03-11 01:57:02
【问题描述】:
我面临这样一种情况,我需要使用相同的最外层键迭代嵌套的字典,将内键值与其他字典的内键值进行比较,然后追加。下面将有助于理解:
{AD:{(62,'VMX','Barcelona','ES'): ['123','567','666'}} #dict1 many more rows
{AD:{(151,'CMXS','','ES','62'): ['345','6754']}} #dict 2 many more rows
所以我需要迭代两个 dicts,比较 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 层深,但这个嵌套循环的问题是,它还附加到 str(k2[0]) == c2[4]) 的所有其他情况。就像最外层的键与 AD 不同。
-
如果您希望最外层的键相同,请添加
and k == c条件。即if (k == c) and (str(k2[0]) == c2[4]) -
或者,跳过第二个 for 循环,只循环具有相同外键的字典。
a = dict2[k]. -
@algrebe 您好,您的第一条评论使它起作用。你能解释一下摆脱第二个for循环的意思吗?讨厌2个嵌套循环。很多不必要的比较
标签: python list dictionary for-loop compare