gpt4 book ai didi

python - 如何将两个相似的嵌套字典合并为一个,每个字典都有一些共享和唯一的嵌套元素(Python)?

转载 作者:行者123 更新时间:2023-12-01 02:21:54 30 4
gpt4 key购买 nike

我有两个大型嵌套字典,需要将其合并为一个字典:

dict1={
1: {"trait1: 32", "trait2": 43, "trait 3": 98},
2: {"trait1: 38", "trait2": 40, "trait 3": 95},
....
}

dict2={
1: {"trait1: 32", "trait2": 43, "trait 4": 54},
2: {"trait1: 38", "trait2": 40, "trait 4": 56},
....
}

我想要得到的是:

dict3={
1: {"trait1: 32", "trait2": 43, "trait 3": 98, "trait 4": 54},
2: {"trait1: 38", "trait2": 40, "trait 3": 95, "trait 4": 56},
....
}

我尝试过使用:

dict3=dict(list(dict1.items()) + list(dict2.items()))

但它只是为我复制 dict2。

我也尝试过像这样循环“主”键(我复制了第一个字典以成为最终输出):

dict3 = dict(dict1)

for key1 in dict3:
for key2 in dict2:
dict3[key1].update({"trait4": dict2[key2]["trait4"]})

但这不起作用,只有每隔几个条目就会在输出中按预期输出。我相当确定我的方法在这方面是错误的。如有任何帮助,我们将不胜感激!

最佳答案

要实现您的目标,您所要做的就是检查字典是否包含键。您应该定义一个函数,例如 update_keys(),它需要两个参数:dict1dict2

要检查字典是否有key,只需编写(如 this question 中所述):

if key in dictionary:
# Action you want to take if dictionary has key.

因此您的解决方案将如下所示(请注意,deepcopy 函数是从复制模块导入的,如下面更新 1 中所述):

#!/usr/bin/env python3

from copy import deepcopy

def update_keys(dict1, dict2):
result_dict = deepcopy(dict1)
for key in dict2:
if key in result_dict:
for sub_key in dict2[key]:
result_dict[key].update({sub_key: dict2[key][sub_key]})
else:
result_dict.update({key: dict2[key]})
return result_dict

dict3 = update_keys(dict1, dict2)

另外为了澄清问题,您可以通过使用 dictionary.items() 来迭代使用值就像 this question 中提到的,因为在嵌套循环和多个 if 语句中,您可能会迷失在所有变量之间。

#!/usr/bin/env python3

from copy import deepcopy

dict1={
1: {"trait1": 32, "trait2": 43, "trait3": 98},
2: {"trait1": 38, "trait2": 40, "trait3": 95}
}

dict2={
1: {"trait1": 32, "trait2": 43, "trait4": 54},
2: {"trait1": 38, "trait2": 40, "trait4": 56}
}

def update_keys(dict_one, dict_two):
result_dict = deepcopy(dict_one)
for key, value in dict_two.items():
if key in result_dict:
for sub_key, sub_value in value.items():
if sub_key not in result_dict[key]:
result_dict[key].update({sub_key: sub_value})
else:
result_dict.update({key: value})
return result_dict

dict3 = update_keys(dict1, dict2)

更新 1: 感谢 @shash678我可以改进我的答案。之前将字典传递给方法并通过分配新值创建浅拷贝来进行复制,如本 question topic 中所述。 。因此,如果要保留 dict1,请导入 copy 模块并使用 deepcopy()其功能是必要的。感谢@shash678 ,这个答案在不修改 dict1 的情况下完成了它的工作。

关于python - 如何将两个相似的嵌套字典合并为一个,每个字典都有一些共享和唯一的嵌套元素(Python)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47881729/

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