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

Python代码query_words长度大于1时出现非预期输出的修复方法

Python多查询词场景字典引用共享问题修复

问题现象

运行如下Python代码时,多查询词场景下输出结果与预期不符:

query_words = ['dollar', 'probabilistic']
query_word_to_synonym_dict = {'probabilistic': ['probabilistic'], 'dollar' : ['currency']}

mail_ids = {123, 108}

big_ds = {}
empty_dict = {}
index = {'probabilistic':{(108, 1)}, 'currency':{(123, 1)}}

for mail_id in mail_ids:
    empty_dict = dict.fromkeys(query_words, [])
    big_ds.update({mail_id:empty_dict})


for query_word in query_words:
    syns = query_word_to_synonym_dict[query_word]

    for syn in syns:
        
        index_of_word = index[syn]
                
        tuple_first = []
        for tuples in index_of_word:
            tuple_first.append(tuples[0])
                
        for number in tuple_first:            
            (big_ds[number][query_word]).append(syn)

print(big_ds)
  • 预期输出:
    {123: {'dollar': ['currency'], 'probabilistic': []}, 108: {'dollar': [], 'probabilistic': ['probabilistic']}}
  • 实际输出:
    {123: {'dollar': ['currency'], 'probabilistic': ['currency']}, 108: {'dollar': ['probabilistic'], 'probabilistic': ['probabilistic']}}

单查询词场景下代码运行正常,当query_words长度大于1时结果异常。

问题根因

问题出在字典初始化的dict.fromkeys(query_words, [])语句:
dict.fromkeys()方法的第二个参数如果传入可变对象(比如列表、字典),所有字典键会共享同一个对象实例的引用,不会为每个键单独创建新的空列表。
单查询词场景下字典只有一个键,引用共享的问题不会暴露;当存在多个查询词时,同一个邮件id下的dollar和probabilistic两个键指向完全相同的列表对象,往任意一个键对应的列表追加内容,另一个键的列表也会同步变化,最终导致结果不符合预期。

修复方法

将字典初始化逻辑替换为字典推导式,为每个查询词单独生成独立的空列表,避免引用共享。
把原初始化循环:

for mail_id in mail_ids:
    empty_dict = dict.fromkeys(query_words, [])
    big_ds.update({mail_id:empty_dict})

修改为:

for mail_id in mail_ids:
    empty_dict = {word: [] for word in query_words}
    big_ds[mail_id] = empty_dict

修改后运行代码,即可得到预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:39:08