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

Python字典列表赋值后原嵌套字典值为空问题解决

问题根源

这是Python的对象引用赋值规则导致的,和你预期的“列表关联原字典、改列表就改原字典”的效果不匹配:

  • 初始化engines_container_overall时,列表里存的只是popular_search_terms下三个空OVERALL字典的内存引用,不是和原字典深度绑定的特殊入口
  • 循环中执行engines_container_overall[index] = df.get_popular_searchterms(False, engine)时,本质是把列表对应索引位置存储的引用替换成了新生成的DataFrame对象的地址,原来存的空字典引用被直接覆盖,全程没有修改popular_search_terms内部的原字典内容,所以原字典的值始终是初始化时的空字典
  • 你打印engines_container_overall[0]能拿到正确结果,只是因为列表当前位置存的是你新赋值的DataFrame,这个对象和原字典已经没有关联了

补充:如果你是对列表里存的字典做原地修改,比如写engines_container_overall[index]['test'] = 1,这种操作是会同步反映到原字典上的——因为此时你没有替换列表里的引用,只是修改了引用指向的字典对象的内部内容;但直接给列表索引位置赋全新的对象,就会切断和原对象的关联。

修复方法

方法1:直接操作原字典赋值(最推荐,逻辑最清晰)

没必要提前存一层引用列表,遍历的时候直接给原字典的对应键赋值即可:

from model.statistic_model import Sher, Op, Npp
import pandas as pd

TODAY = "today"
OVERALL = "overall"
SHER = "sherlock"
OP = "oprisk"
NPP = "npp"

popular_search_terms = {SHER: {TODAY: {}, OVERALL: {}}, OP: {TODAY: {}, OVERALL: {}}, NPP: {TODAY: {}, OVERALL: {}}}
engines = [Sher, Op, Npp]
# 维护和engines顺序一一对应的业务键
engine_map_keys = [SHER, OP, NPP]

try:
    for idx, engine in enumerate(engines):
        popular_search_terms[engine_map_keys[idx]][OVERALL] = df.get_popular_searchterms(False, engine)
except Exception as e:
    print(e)
    for key in engine_map_keys:
        popular_search_terms[key][OVERALL] = pd.DataFrame()

执行完后直接访问popular_search_terms[SHER][OVERALL]就能拿到正确的值。

方法2:先构建中间列表,再同步回原字典

如果你确实需要单独用engines_container_overall这个列表做其他逻辑,可以先把列表的所有值填充完,最后统一同步到原字典:

engines_container_overall = []
try:
    for engine in engines:
        engines_container_overall.append(df.get_popular_searchterms(False, engine))
except Exception as e:
    print(e)
    engines_container_overall = [pd.DataFrame() for _ in engines]

# 统一回写原字典
for idx, key in enumerate([SHER, OP, NPP]):
    popular_search_terms[key][OVERALL] = engines_container_overall[idx]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:12:20