擅长:python、mysql、java
<p>问题是,如果存在匹配项,则将dict中的值设置为<code>x</code>,然后继续循环并将下一个值设置回<code>"No"</code>。如前所述,您可以使用<code>break</code>在第一次匹配时退出循环。或者您可以使用<code>next</code>获取下一个匹配值(如果有),或者使用<code>"No"</code>获取其他匹配值</p>
<pre><code>dico = {}
for i, v in enumerate(listo):
dico[i] = next((x for x in mm if x in v), "No")
</code></pre>
<p>这样,你甚至可以把它变成一本字典</p>
<pre><code>dico = {i: next((x for x in mm if x in v), "No") for i, v in enumerate(listo)}
</code></pre>
<p>然而,使用<code>"No"</code>作为默认值可能不是一个好的选择,因为从技术上讲它也可能在<code>mm</code>中。相反,您可能更愿意使用<code>None</code>。
但从评论来看,您可能实际上想要一个<em>所有</em>匹配项的列表,这将更加简单:</p>
<pre><code>dico = {i: [x for x in mm if x in v] for i, v in enumerate(listo)}
# {0: ['med'], 1: [], 2: [], 3: ['holy'], 4: []}
</code></pre>
<p>当然,如果键只是索引,也可以使用更简单的列表理解:</p>
<pre><code>dico = [[x for x in mm if x in v] for v in listo]
# [['med'], [], [], ['holy'], []]
</code></pre>
<p>(另外,当值实际为<code>==</code>时,您正在测试<code>in</code>,但这可能只是在本例中。)</p>