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

Python中set.add()触发异常:条件外添加索引的问题排查

问题根源:dict.fromkeys()的可变对象引用陷阱

你遇到的问题核心是**dict.fromkeys()的参数特性**:当你用dict.fromkeys(all_tokens, set())创建字典时,所有键对应的都是同一个集合对象,而不是每个键都拥有独立的集合。

因为set()是可变对象,fromkeys只会把这个对象的引用赋值给所有键。所以不管你操作哪个token对应的token_dict[token].add(i),本质上都是在修改同一个集合。这就导致所有token的集合最后都会包含所有索引,看起来像是条件判断失效了。

换成list时同理,所有键共享同一个列表,每次append都会往这个公共列表里加元素,自然会重复添加多次。


解决办法

把token_dict的创建方式换成字典推导式,这样每个键都会生成独立的新集合:

token_dict = {token: set() for token in all_tokens}

用这种方式创建的字典,每个token对应的都是全新的集合对象,操作各自的集合时不会互相干扰,条件判断if token in token_set:就能正常生效,只有符合条件的索引才会被添加到对应token的集合里。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:01:02