繁体   English   中英

如果每个键有多个值,如何在 python 3.7 中合并 2 个字典并获取一个列表

[英]How to merge 2 dictionaries in python 3.7 and get a list if there are multiple values per key

我有以下两个字典:

dict_1 = {'a': 1, 'b': 2, 'e': 5}
dict_2 = {'c': 3, 'd': 4, 'e': 7}

我想合并它们,结果是:

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': [5,7]}

列表的顺序很重要,所以 dict_1 与 dict_2 合并应该得到 'e': [5,7] 和 dict_2 与 dict_1 合并应该得到 'e': [7,5]

迭代第二个字典并应用逻辑:新对或列表

result = {**dict_1}
for k, v in dict_2.items():
    if k in result:
        result[k] = [result[k], v]
    else:
        result[k] = v

# final sorting
result = {k: result[k] for k in sorted(result)}

这可以通过经典的嵌套循环来解决,并且可以推广到任意数量的字典:

dict_1 = {'a': 1, 'b': 2, 'e': 5}
dict_2 = {'c': 3, 'd': 4, 'e': 7}

out = {}

for d in [dict_1, dict_2]:
    for k,v in d.items():
        if k in out:
            if isinstance(out[k], list):
                out[k].append(v)
            else:
                out[k] = [out[k], v]
        else:
            out[k] = v
out

输出:

{'a': 1, 'b': 2, 'e': [5, 7], 'c': 3, 'd': 4}

注意。 将按出现顺序排列,如果需要,您可以在之后对它们进行排序。 这些按所需的顺序排列

试试这个:

from collections import defaultdict

def merge_dict(x,y):
    dd = defaultdict(list)

    for d in (x, y): # you can list as many input dicts as you want here
        for key, value in d.items():
            dd[key].append(value)

    dd = dict(sorted(dd.items()))

    return dd

测试

x = {'a': 1, 'b': 2, 'e': 5}
y = {'c': 3, 'd': 4, 'e': 7}

print(merge_dict(x,y))

out: {'a': [1], 'b': [2], 'c': [3], 'd': [4], 'e': [5, 7]}

print(merge_dict(y,x))

out: {'a': [1], 'b': [2], 'c': [3], 'd': [4], 'e': [7, 5]}

def combined(d1, d2): commons = {key: [d1[key], d2[key]] for key in (key for key in d1 if key in d2)} return {**d1, **d2, **commons}

你可以试试这个

def update_dictionary(dict_, to_be_update_dict):
    for k, v in dict_.items():
        if to_be_update_dict.get(k) != None:
            to_be_update_dict[k] = to_be_update_dict[k] + [v]
        else:
            to_be_update_dict[k] = [v]


dict_3 = {}

update_dictionary(dict_1,dict_3)

update_dictionary(dict_2,dict_3)

dict_3
Out[114]: {'a': [1], 'b': [2], 'e': [5, 7], 'c': [3], 'd': [4]}

并按其键对字典进行排序

sorted_dict = dict(sorted(dict_3.items()))

{'a': [1], 'b': [2], 'c': [3], 'd': [4], 'e': [5, 7]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM