我有列表列表形式的数据,我试图匹配需求和供应,使每个需求唯一匹配一个供应项目。
dmndId_w_freq = [['a',4,[1,2,3,4]],['b',6,[5,6,7,8,3,4]],['c',7,[6,5,7,9,8,3,4]],['d',8,[1,6,3,4,5,6,7,10]]]
num_sims = 1
for sim_count in range(num_sims):
dmndID_used_flag = {}
splID_used_flag = {}
dmndID_splId_one_match = {}
for i in dmndId_w_freq:
if i[0] not in dmndID_used_flag.keys():
for j in i[2]:
#print j
#print "CLICK TO CONTINUE..."
#raw_input()
if j in splID_used_flag.keys():
i[2].remove(j)
dmndID_splId_one_match[i[0]] = i[2][0]
splID_used_flag[i[2][0]] = 1
dmndID_used_flag[i[0]] = 1
print
print dmndID_splId_one_match
#print splID_used_flag
#print dmndID_used_flag
#raw_input()
我希望输出dmndID_splId_one_match类似于{' a':1,'':5,' c':6,&#39 ; d':3}。 但我最终得到了{' a':'':''''':'':': 所以我没有得到一个独特的匹配,因为供应项目6被映射到需求' c'以及需求'。 我尝试通过循环来调试代码,似乎问题出现在for-loop
中for j in i[2]:
代码没有经过i [2]的所有元素。这不会发生在' a'和' b'部分。但是开始发生在' c'部分。它超过6和5,但跳过7(列表的第三个元素[6,5,7,9,8,3,4])。同样,在' d'部分它跳过列表[1,6,3,4,5,6,7,10]中的第二个元素6。这就是映射发生两次的原因,因为我无法将其删除。
我没有按预期执行for循环,我做错了什么?
有没有更好的方法来编写此代码?
答案 0 :(得分:0)
I figured out the problem in the for loop. I am looping through i[2] and then trying to modify it within the loop. this makes it unstable.