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

如何为内层字典键创建新list/set对象 避免重复更新同一对象

问题根源

你代码中的t列表在定义时就已经创建了两个固定的set实例,后续每次调用lambda生成内层字典时,都是直接复用这两个全局的set对象,因此所有内层字典的对应字段都指向同一内存地址,修改任意一个都会同步到所有内层字典中。

解决方案
  • 方法一:直接在lambda中定义新的set实例
    直接将内层字典的生成逻辑写在lambda内部,每次调用都会生成新的set:
from collections import defaultdict

inn_d = lambda: {'Jobs': set(), 'Titles': set()}
d = defaultdict(inn_d)

d['A']['Jobs'].add('Cook')
d['B']['Titles'].add('President')
print(d)

输出和你预期的完全一致:

defaultdict(<function <lambda> at 0x...>, {'A': {'Jobs': {'Cook'}, 'Titles': set()}, 'B': {'Jobs': set(), 'Titles': {'President'}}})
  • 方法二:用字典推导式适配多键场景
    如果后续需要新增更多内层键,可以把键单独抽成列表,用字典推导式生成,维护更灵活:
from collections import defaultdict

INNER_KEYS = ['Jobs', 'Titles']
# 每次调用都会遍历键列表生成全新的set实例
inn_d = lambda: {key: set() for key in INNER_KEYS}
d = defaultdict(inn_d)

d['A']['Jobs'].add('Cook')
d['B']['Titles'].add('President')
print(d)

效果和方法一完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:24:04