如何通过嵌套缺失键列表高效为Python字典补全另一字典的对应值
实现方案
因为你已经通过对比拿到了所有a1缺失的键路径,不需要二次遍历两个字典做差异校验,直接遍历路径列表逐层定位赋值即可,是当前场景下时间复杂度最低的实现方式,完全不会覆盖a1原有键值。
核心实现代码
def add_missing_keys(target_dict, source_dict, key_paths): for path in key_paths: # 逐层定位到嵌套字典的倒数第二层级 cur_target = target_dict cur_source = source_dict for key in path[:-1]: cur_target = cur_target[key] cur_source = cur_source[key] # 仅给缺失的最后一个键赋值 cur_target[path[-1]] = cur_source[path[-1]]
测试用例
# 原始字典 a1 = {'a': 2, 'b': 3, 'c': 1, 'e': {'f': 6, 'h': {'j': 3}}} a2 = {'a': 2, 'c': 2, 'd': 4, 'e': {'f': 6, 'g': 8, 'h': {'i': 10}}} # 缺失键路径 missing_keys = [['d'], ['e', 'g'], ['e', 'h', 'i']] # 调用方法 add_missing_keys(a1, a2, missing_keys) print(a1)
输出结果
{'a': 2, 'b': 3, 'c': 1, 'e': {'f': 6, 'g': 8, 'h': {'j': 3, 'i': 10}}, 'd': 4}
方案优势
- 时间复杂度为O(k),k为所有路径的总层数之和,无多余计算开销
- 不会修改a1原有键的取值,完全符合不覆盖的要求
- 逻辑简单易维护,适配任意层级的嵌套字典结构
内容的提问来源于stack exchange,提问作者Mwangi Kabiru
相关产品推荐
相关产品推荐

