首页 >后端开发 >Python教程 >如何在Python中高效地合并嵌套字典?

如何在Python中高效地合并嵌套字典?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-03 02:23:10674浏览

How Can I Efficiently Merge Nested Dictionaries in Python?

Python 中合并嵌套字典

在 Python 中,我们经常会遇到需要组合多个嵌套字典的场景。这项任务可能具有挑战性,特别是当字典具有不同程度的深度和潜在冲突时。

为了合并字典的字典并维护层次结构,我们使用递归函数:

def merge(a: dict, b: dict, path=[]):
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                merge(a[key], b[key], path + [str(key)])
            elif a[key] != b[key]:
                raise Exception('Conflict at ' + '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a

此函数接受两个字典 a 和 b,以及一个可选的路径参数,用于跟踪合并字典中的当前路径。它迭代 b 中的每个键并执行以下操作:

  • 如果 a 中存在该键并且两个值都是字典,则它递归地合并两个字典并更新路径。
  • 如果键存在于 a 中但值不是字典,则会检查冲突。如果检测到冲突,则会引发异常。
  • 如果a中不存在该键,则将其与b中的值添加到a中。

最后,合并返回字典a。

要合并多个字典,可以使用reduce将所有字典合并为一个字典字典:

from functools import reduce
reduce(merge, [dict1, dict2, dict3...])

此操作会将所有字典的内容添加到列表中的第一个字典中。

示例:

dict1 = {1:{'a':{'A'}}, 2:{'b':{'B'}}}
dict2 = {2:{'c':{'C'}}, 3:{'d':{'D'}}}
print(merge(dict1, dict2))

# Output:
# {1:{'a':{'A'}}, 2:{'b':{'B'}, 'c':{'C'}}, 3:{'d':{'D'}}}

请注意,生成的字典存储在 dict1 中。

以上是如何在Python中高效地合并嵌套字典?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn