我有两本词典:
dict_1 = {'H1':[0,1,3,2],
'H2':[5,4,2,1,5],
'H3':[1,2,5]}
dict_2 = {'H1':[[1,4,3,2],
[6,5,3,2],
[1,4,3,2]],
'H2':[[0,0,1,6,3],
[2,1,4,2,1],
[5,1,2,5,3]],
'H3':[[2,3,4],
[2,1,4],
[0,1,2]]}
我试图遍历dict_1中键的值中的项目,并检查这些项目中是否有任何项目位于dict_2中相应键的值中的任何项目中。然后打印值,以及在dict_2的键中找到它的索引。
因此,例如,因为密钥列表中的0< H1'在密钥“H1”的任何列表中都找不到dict_1。在字典2中,什么都不打印。现在,如果我们检查1,那么
1, 'H1', 0, # because there is a one in the first list of 'H1' of dict_2
1, 'H1', 2, # because there is a one in the 3rd list of 'H1' of dict_2
此处1
对应于已检查的项目,'H1'
已检查的密钥,0
和2
表示{{1}列表在dict_2中找到了
这就是我所拥有的:
1
但是我想知道这是否会照顾一切,或者是否会打印重复的项目?
答案 0 :(得分:2)
这应该有效:
{{1}}
迭代所有键,列表和d1。然后在d1_list中的元素上,最后检查它是否是dict_2中与同一个键对应的任何列表。
答案 1 :(得分:0)
首先回答一些问题:是的,您的代码将会#34;照顾好所有事情",并且不会打印重复的项目"意思是如果一个值在dict_2中的同一个列表中出现了几次,那么你的代码只会发现一次。
在这些dict上执行代码演示了这一点:
dict_1 = {'H1':[0,1,3,2]}
dict_2 = {'H1':[[0,0],
[1,2]]}
for i in range(2):
for k,v in dict_1.items():
for x,y in dict_2.items():
if k == x:
for j in v:
if j in y[i]:
print j,x,i
输出是:
0 H1 0
1 H1 1
2 H1 1
因此,在dict_2的第一个子列表中出现两次时,只发现一次0值。
现在,为了完成相同的目标,我们可以简化您的代码,因为:
我建议如下:
# Loop on all key values in dict_1
for k,v in dict_1.items():
# Loop only on values in dict_2 for same key
for i,y in enumerate(dict_2[k]):
# Loop over values in first list
for j in v:
# Assert existence in second list
if j in y:
# Display result if found (note that index of subblist in dict_2 is retrieved through enumerate function
print j,x,i
此输出与dict_2格式的附加灵活性和灵活性完全相同。
希望这有帮助。