基于匹配键:值对的字典列表中的组合字典

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

我要在具有匹配的键:值对的字典列表中合并/合并多个字典。但是,我不希望这些对中的“值”本身成为每个新形成的词典中的列表。每个字典具有相同的键集,但是除了要组合的键之外,大多数key:value对将是唯一的。我知道我可以根据此示例中的匹配键来组合字典:

>>>from collections import defaultdict
d1 = {'A': 'str1', 'B': 41, 'C': 32}
d2 = {'A': 'str1', 'B': 12, 'C': 62}
d3 = {'A': 'str2', 'B': 47, 'C': 73}
d4 = {'A': 'str2', 'B': 101, 'C': 93}

dd = defaultdict(list)

for d in [d1, d2, d3, d4]: # you can list as many input dicts as you want here, I'll have a few thousand
    for key, value in d.items():
        dd[key].append(value)

print(dd)

这给了我预期的结果:

defaultdict(<class 'list'>, {'A': ['str1', 'str1', 'str2', 'str2'],
                             'B': [41, 12, 47, 101],
                             'C': [32, 62, 73, 93]})

当我want达到我想要的结果时,实际上是这样的:

[{'A': 'str1', 'B': [41, 12], 'C': [32, 62]}, 
 {'A': 'str2', 'B': [47, 101], 'C': [73, 93]}]

例如匹配键'B''C'的值构成列表,仅在键'A'下存在匹配的键对:值对时组合字典,而不在'A']中形成相同值的列表

我要在具有匹配的键:值对的字典列表中合并/合并多个字典。但是,我不希望这些对中的“值”本身成为每个新出现的列表...

python dictionary
2个回答
1
投票

您可以执行以下操作:


1
投票
dd2=[]
for d in [d1,d2,d3,d4]:
    found=False
    for dtmp in dd2:        
        if dtmp['A'] == d['A']:
            dtmp['B'].append(d['B'])
            dtmp['C'].append(d['C'])
            found=True
    if not found:
        dtmp2={'A':d['A'],'B':[d['B']],'C':[d['C']]}
        dd2.append(dtmp2)
© www.soinside.com 2019 - 2024. All rights reserved.