请查看此代码。对于dic[0],它必须打印为“med”,而不是“No”。请问如何解决这个问题
dico = {}
listo = ['med', 'lam', 'rih', 'holy', 'lem']
mm = ['med', 'holy']
for i, v in enumerate(listo):
for x in mm:
if x in v:
dico[i] = x
else:
dico[i] = 'No'
dico
这是输出:
{0: 'No', 1: 'No', 2: 'No', 3: 'holy', 4: 'No'}
Tags:
问题是,如果存在匹配项,则将dict中的值设置为
x
,然后继续循环并将下一个值设置回"No"
。如前所述,您可以使用break
在第一次匹配时退出循环。或者您可以使用next
获取下一个匹配值(如果有),或者使用"No"
获取其他匹配值这样,你甚至可以把它变成一本字典
然而,使用
"No"
作为默认值可能不是一个好的选择,因为从技术上讲它也可能在mm
中。相反,您可能更愿意使用None
。 但从评论来看,您可能实际上想要一个所有匹配项的列表,这将更加简单:当然,如果键只是索引,也可以使用更简单的列表理解:
(另外,当值实际为
==
时,您正在测试in
,但这可能只是在本例中。)如果找到匹配项,则需要从循环中
break
,并且仅当未找到匹配项时才将其设置为No
。像这样:输出:
您遇到的问题是,由于没有从内部
for
循环中断,因此在您已经编写了'med'
之后,在以后的迭代中用'No'
覆盖dico[0]
(注意此处
else
的缩进-它伴随for
而不是if
。)相关问题 更多 >
编程相关推荐