gpt4 book ai didi

python - 在 Python 2.7 中合并多嵌套字典的最佳方法

转载 作者:行者123 更新时间:2023-12-04 11:23:12 27 4
gpt4 key购买 nike

我有两个嵌套的字典,我想将它们合并为一个(其中第二个 dict 覆盖第一个 dict 值)。我看到了很多用于合并“平面”(非嵌套)字典的漂亮解决方案,例如:

dict_result = dict1.copy()
dict_result.update(dict2)

或者
dict_result = dict(dict1.items() + dict2.items())

或(我最喜欢的)
dict_result = dict(d1,**d2)

但找不到合并多嵌套字典的最有效方法。

我试图避免递归。你的提议是什么?

最佳答案

除非要合并的字典的深度受到严格限制,否则无法避免递归。1) 此外,没有 bultin 或库函数来执行此操作(即,我不知道),但实际上并不是那么难.这样的事情应该做:

def merge(d1, d2):
for k in d2:
if k in d1 and isinstance(d1[k], dict) and isinstance(d2[k], dict):
merge(d1[k], d2[k])
else:
d1[k] = d2[k]

这是做什么的:它迭代 d2 中的键如果 key 也可以在 d1 中找到并且都是字典,合并这些子字典,否则覆盖 d1 中的值来自 d2 .请注意,此更改 d1及其子词典就位,因此您可能希望在此之前对其进行深度复制。

或使用此版本创建合并副本:
def merge_copy(d1, d2):
return {k: merge_copy(d1[k], d2[k]) if k in d1 and isinstance(d1[k], dict) and isinstance(d2[k], dict) else d2[k] for k in d2}

例子:
>>> d1 = {"foo": {"bar": 23, "blub": 42}, "flub": 17}
>>> d2 = {"foo": {"bar": 100}, "flub": {"flub2": 10}, "more": {"stuff": 111}}
>>> merge(d1, d2)
>>> print d1
{'foo': {'bar': 100, 'blub': 42}, 'flub': {'flub2': 10}, 'more': {'stuff': 111}}

1)您可以使用堆栈进行迭代,但这只会使事情变得更加复杂,并且只能避免最大递归深度出现问题。

关于python - 在 Python 2.7 中合并多嵌套字典的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29847098/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com