python字典中的连接值

问题描述 投票:-1回答:2

我想在不覆盖的情况下更新python字典。

类似于:

d1 = {id1 : val1, id2 : val2}
d2 = {id1 : val3, id3 : val4}

d1 + d2 = {id1 : [val1, val3], id2 : [val2], id3 : [val4]}

您有什么想法吗?

python list dictionary merge concat
2个回答
0
投票

听起来像您需要一个函数,该函数为每个键创建新列表,然后在必要时附加到它们。

d1 = {'id1' : 'val1', 'id2' : 'val2'}
d2 = {'id1' : 'val3', 'id3' : 'val4'}

def concatDicts(d1,d2):
    dsum = {}
    for key in d1:
        if key not in dsum:
            dsum[key] = [d1[key]]
    for key in d2:
        if key not in dsum:
            dsum[key] = []
        dsum[key].append(d2[key])
    return dsum

d3 = concatDicts(d1,d2)
print(d3)
# d3 = {id1 : [val1, val3], id2 : [val2], id3 : [val4]}

0
投票

您可以遍历两个字典键的union,并相应地附加到defaultdict中:

from collections import defaultdict

d_out = defaultdict(list)
d_union = [d1, d2]
for k in set().union(*d_union):
    for d in d_union:
        if k in d:
            d_out[k].append(d[k])

print(d_out)
efaultdict(list, {'id1': ['val1', 'val3'], 'id2': ['val2'], 'id3': ['val4']})
© www.soinside.com 2019 - 2024. All rights reserved.