You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典赋值异常:如何让dict[0]输出'med'而非'No'?

修复Python字典赋值被覆盖的问题

嘿,我一眼就瞅出问题所在啦!你的内层循环在遍历mm里的元素时,每次循环都会重新给dico[i]赋值,哪怕之前已经匹配到正确的值了,最后一次不匹配的循环会把之前的结果覆盖掉。

举个例子:当处理listo[0]也就是'med'时,第一次x = 'med',匹配成功,dico[0]被设为'med';但紧接着x变成'holy',这时候'holy'不在'med'里,代码就把dico[0]改成了'No'——这就是为啥你得到的结果里dict[0]是'No'而不是期望的'med'。

下面给你两种修复方案,任选其一都能解决问题:

方案一:先设默认值,找到匹配就停止内层循环

这种方法逻辑直观,先给每个位置默认赋值'No',一旦找到匹配项就更新值并跳出内层循环,避免被后续不匹配的元素覆盖:

dico = {}
listo = ['med', 'lam', 'rih', 'holy', 'lem']
mm = ['med', 'holy']
for i, v in enumerate(listo):
    dico[i] = 'No'  # 先设置默认值
    for x in mm:
        if x in v:
            dico[i] = x
            break  # 找到匹配就立刻停止内层循环,防止被覆盖

方案二:用next()简化逻辑

利用Python的next()函数结合生成器表达式,直接取第一个匹配的元素,没有匹配项时返回默认值'No',代码更简洁:

dico = {}
listo = ['med', 'lam', 'rih', 'holy', 'lem']
mm = ['med', 'holy']
for i, v in enumerate(listo):
    # 遍历mm,返回第一个匹配的x;如果没有匹配,返回'No'
    match = next((x for x in mm if x in v), 'No')
    dico[i] = match

运行上面任意一段代码,你都会得到期望的结果:{0: 'med', 1: 'No', 2: 'No', 3: 'holy', 4: 'No'}

内容的提问来源于stack exchange,提问作者Mohamed Hachaichi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:58:13