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

如何用defaultdict构建嵌套字典并向newKey列表追加元素?

解决嵌套defaultdict追加元素的报错问题

这个错误的根源很好理解——你一开始把mydict定义成了defaultdict(list),所以当你访问mydict[x]时,它会自动生成一个空列表,而不是字典。你后来给这个列表append了一个字典{'newKey': []},这时候mydict[x]其实是[{'newKey': []}](一个包含字典的列表),自然没法用字符串'newKey'去索引它,列表只认整数或切片索引,这就是报错的原因。

要实现你想要的{x: {'newKey': [100]}}这种嵌套字典结构,你需要把defaultdict的默认工厂改成另一个defaultdict(类型为list),这样每一个mydict[x]都会自动生成一个默认值为列表的字典。代码如下:

from collections import defaultdict

# 嵌套的defaultdict:外层字典的默认值是一个"值为列表的defaultdict"
mydict = defaultdict(lambda: defaultdict(list))

# 直接向目标键对应的列表追加元素
x = "test_key"
mydict[x]['newKey'].append(100)
mydict[x]['newKey'].append(200)

# 转成普通字典便于查看结果
print(dict(mydict))
# 输出:{'test_key': {'newKey': [100, 200]}}

这样做的好处是,不管是外层的键(比如x)还是内层的键(比如newKey),第一次访问时都会自动生成对应的结构,不需要手动初始化字典或列表,完全满足你“持续向newKey追加元素”的需求。

如果你最终需要的是纯普通字典(而非defaultdict实例),可以在操作完成后把外层和内层都转成普通字典:

# 批量把内层defaultdict转成普通字典
result = {k: dict(v) for k, v in mydict.items()}
print(result)
# 输出同样是:{'test_key': {'newKey': [100, 200]}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:39:05