我正在尝试在 Python 中合并两个字典,但我无法确保保留两个字典中的数据。如果两个字典中都存在某个键,我想将它们的值组合到一个列表中。
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 3, 'c': 4, 'd': 5}
merged_dict = dict1.copy()
for key, value in dict2.items():
if key in merged_dict:
merged_dict[key] = [merged_dict[key], value]
else:
merged_dict[key] = value
print(merged_dict)
我得到的输出是:
{'a': 1, 'b': [2, 3], 'c': [3, 4], 'd': 5}
这可行,但如果已经有列表作为值,则此方法不能很好地处理它。例如,合并
dict1 = {'a': [1], 'b': 2}
dict2 = {'a': 3, 'b': [4], 'c': 5}
所需输出:
{'a': [1, 3], 'b': [2, 4], 'c': 5}
如何改进我的功能以更普遍地处理这种情况?有没有一种更 Pythonic 的方法来合并字典,同时确保在键重叠时将所有值组合到列表中?
我认为答案是创建键、值对并将其添加到一个新的字典中,这允许转换列表中相应键的值,然后将每个元素附加到一个空字典中,如果这回答了你的问题。
这是一个例子:
def merge_dictionaries(dict1, dict2):
merged_dict = {}
# Add all keys from the first dictionary
for key, value in dict1.items():
if key in dict2:
# Combine values into a list
merged_dict[key] = [value] if not isinstance(value, list) else value
merged_dict[key].append(dict2[key])
else:
# Add value as-is
merged_dict[key] = value
# Add remaining keys from the second dictionary
for key, value in dict2.items():
if key not in dict1:
merged_dict[key] = value
# Flatten lists if necessary
for key, value in merged_dict.items():
if isinstance(value, list):
merged_dict[key] = [v for sublist in value for v in (sublist if isinstance(sublist, list) else [sublist])]
return merged_dict