Python3中如何高效为嵌套字典添加多层键值对?
高效创建嵌套字典并添加键值对的方法
下面几种方法可以帮你避免手动逐层创建嵌套空字典:
用
collections.defaultdict递归生成嵌套结构
定义一个递归的defaultdict,访问不存在的键时会自动生成嵌套的空字典,直接就能赋值:from collections import defaultdict def nested_dict(): return defaultdict(nested_dict) my_dict = nested_dict() my_dict["foo"]["bar"]["woo"] = "foobar"要是需要转成普通字典,可以写个简单的递归函数转换,日常使用中defaultdict和普通字典兼容性很好,大部分场景直接用就行。
链式调用
dict.setdefault()
这个方法不用导入模块,直接利用字典自带的setdefault——不存在键就创建空字典,存在则返回已有值,链式调用就能直接设置最内层值:my_dict = {} my_dict.setdefault("foo", {}).setdefault("bar", {})["woo"] = "foobar"用
functools.reduce处理动态键路径
如果你的键路径是动态的(比如存在列表里),用reduce可以灵活处理任意层数的嵌套:from functools import reduce my_dict = {} key_path = ["foo", "bar", "woo"] target_value = "foobar" # 逐层创建嵌套字典,最后给最内层键赋值 reduce(lambda d, k: d.setdefault(k, {}), key_path[:-1], my_dict)[key_path[-1]] = target_value
内容的提问来源于stack exchange,提问作者BigP
相关产品推荐
相关产品推荐

