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

使用嵌套defaultdict触发AttributeError异常该如何解决?

错误原因

你当前代码的最内层默认类型设置为Counter,直接对d["Store1"]["Product1"]执行+=1操作时,会把默认生成的Counter实例覆盖为int类型数值,后续打印或访问该属性时触发Counter的内置方法调用,进而抛出属性错误。

解决方案

你需要的是两层嵌套字典、最内层存储计数值的结构,有两种可行方案都可以支持d["Store1"]["Product1"] += 1的写法:

方案1:嵌套defaultdict,最内层默认值为int

该方案生成的结构和你要求的目标完全一致,无需额外转换:

from collections import defaultdict

d = defaultdict(lambda: defaultdict(int))
# 测试赋值
d["Store1"]["Product1"] += 1
d["Store2"]["Product1"] += 2
d["Store2"]["Product2"] += 1

# 输出验证
print(dict(d))
# 运行结果:{'Store1': {'Product1': 1}, 'Store2': {'Product1': 2, 'Product2': 1}}

方案2:defaultdict搭配Counter(适合需要统计功能的场景)

如果你后续需要用到计数排序、高频统计等Counter的内置功能,可以用该方案:

from collections import defaultdict, Counter

d = defaultdict(Counter)
# 测试赋值写法完全一致
d["Store1"]["Product1"] += 1
d["Store2"]["Product1"] += 2
d["Store2"]["Product2"] += 1

# 转成普通字典即可匹配目标结构
print({k: dict(v) for k, v in d.items()})
# 运行结果:{'Store1': {'Product1': 1}, 'Store2': {'Product1': 2, 'Product2': 1}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:15:05