如何将Python嵌套dict内的tuple键转换为三级嵌套dict结构
解法1:使用dict.setdefault(无额外依赖,推荐)
无需导入额外模块,直接用Python原生字典方法即可省略显式的key存在性判断,性能和你原有实现完全一致,时间复杂度为O(n):
new_d = {} for key1, inner_dict in d.items(): new_d[key1] = {} for (key2, key3), value in inner_dict.items(): new_d[key1].setdefault(key2, {})[key3] = value
setdefault方法会自动判断key2是否存在于当前二级字典中:不存在则先赋值为空字典{},存在则直接返回对应的二级字典,之后直接写入key3:value即可,完全替代原有代码中的if-else判断。
解法2:使用collections.defaultdict(写法更简洁)
如果可以使用Python标准库,defaultdict可以进一步简化写法:
from collections import defaultdict new_d = {} for key1, inner_dict in d.items(): level2 = defaultdict(dict) for (key2, key3), value in inner_dict.items(): level2[key2][key3] = value new_d[key1] = dict(level2) # 若允许二级字典为defaultdict类型可省略这一步
补充说明
两种实现的性能和你原始的循环写法完全一致,都是遍历所有内层键值对一次,没有额外性能损耗,且代码更简洁易读,属于Python中处理嵌套字典的常用写法。
如果追求纯字典推导式的写法也可以实现,但会额外遍历内层数据两次,数据量较大时性能更差,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者Alon.b
相关产品推荐
相关产品推荐

