列表内defaultdict索引问题:如何向单个字典追加元素
问题根源与解决方法
这是因为你创建列表的方式踩了Python可变对象的坑![defaultdict(list)] * (2)并没有生成两个独立的defaultdict实例——它只是把同一个defaultdict对象的引用重复了两次。所以不管你通过dicty[0]还是dicty[1]操作,本质上都是在修改同一个字典,这就导致了两个“看起来独立”的字典同时变化。
正确的列表创建方式
要生成包含独立defaultdict实例的列表,你需要用列表推导式,每次循环都创建一个新的defaultdict:
from collections import defaultdict # 正确写法:每次迭代都会生成新的defaultdict dicty = [defaultdict(list) for _ in range(2)]
验证索引操作
现在再执行你想要的追加操作:
dicty[0][0].append('abc')
此时打印dicty,结果会是:
[defaultdict(list, {0: ['abc']}), defaultdict(list, {})]
只有第一个字典被修改,完全符合你的需求。
内容的提问来源于stack exchange,提问作者el323
相关产品推荐
相关产品推荐

