如何在Python中合并两个字典而不丢失任何数据?

问题描述 投票:0回答:1

我正在尝试在 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 的方法来合并字典,同时确保在键重叠时将所有值组合到列表中?

python list dictionary merge nested
1个回答
0
投票

我认为答案是创建键、值对并将其添加到一个新的字典中,这允许转换列表中相应键的值,然后将每个元素附加到一个空字典中,如果这回答了你的问题。

这是一个例子:

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
© www.soinside.com 2019 - 2024. All rights reserved.