Python如何同时为顶层字典与嵌套字典创建对应键值对
解决方案
报错原因
直接执行famCountDictofDicts["three"]["threeA"] = 1会触发KeyError,是因为顶层字典中不存在three这个键,无法直接访问不存在键的嵌套属性。
可行实现方案
方案1:使用collections.defaultdict(适配批量处理场景,最推荐)
这个方案适配你处理多个DataFrame的需求,不需要手动判断顶层键是否存在,默认会为不存在的顶层键自动创建空嵌套字典:
from collections import defaultdict # 初始化时指定默认值为字典,原有数据可以直接传入初始化 famCountDictofDicts = defaultdict(dict, { "one": {"oneA": 1, "oneB": 2, "oneC": 3}, "two": {"twoA": 1, "twoB": 2, "twoC": 3} }) # 可以直接按你期望的写法赋值 famCountDictofDicts["three"]["threeA"] = 1
输出结果和你预期完全一致:
{'one': {'oneA': 1, 'oneB': 2, 'oneC': 3}, 'two': {'twoA': 1, 'twoB': 2, 'twoC': 3}, 'three': {'threeA': 1}}
方案2:使用字典内置setdefault方法(不需要导入额外库)
如果不想引入额外模块,可以用原生字典的setdefault方法,不存在对应顶层键时自动创建空字典:
# 原有普通字典不需要修改定义 famCountDictofDicts = {"one": {"oneA": 1, "oneB": 2, "oneC": 3}, "two": {"twoA": 1, "twoB": 2, "twoC": 3}} # 赋值时先调用setdefault famCountDictofDicts.setdefault("three", {})["threeA"] = 1
业务场景适配说明
批量处理DataFrame列表存储变量时,用defaultdict方案效率最高,遍历每个DataFrame时直接用DataFrame的标识作为顶层键,变量名作为嵌套键赋值即可,不需要额外做键存在性判断,天然适配不同DataFrame变量不一致的情况。
内容的提问来源于stack exchange,提问作者Lamma
相关产品推荐
相关产品推荐

