合并两个不同大小和不同值的词典

时间:2017-02-25 09:38:39

标签: python list dictionary

如果我有两个不同的词典,我是从不同大小的查询中创建的

dictionary1:
{'id': 1 , 'passCount': 3}, {'id': 2 , 'passCount': 4}, {'id': 5 , 'passCount': 7}, {'id': 6, 'passCount': 3}

dictionary2: 
{'id': 1 , 'failCount': 1}, {'id': 3 , 'failCount': 2}, {'id': 5 , 'failCount': 3}

最初,我从这两个词典中创建了一个主列表:

List = []
for i in dictionary1:
for j in dictionary2:
    if i['id'] = j['id]:
       List.append[i['id'],i['passCount'],j['failCount']]
    else:
       List.append[i['id'],i['passCount'],0]
       List.append[j['id'],0, j['failCount']
return List

当我打印此列表以获取我的数据时,我只会获得匹配的ID列表,而不会考虑其他ID。

出于这个原因,我想打印一本字典,我可以在那里打印

{'id' = 1, 'passCount' = 3, 'failCount' = 1}, {'id': 2 , 'passCount': 4, 'failCount' = 0}...等等,不删除任何ID

由于

2 个答案:

答案 0 :(得分:0)

也许他们是两个不同的列表,而不是字典,所以我假设它们是两个列表:

failCount默认设置为0,您可以尝试:

a=[{'id': 1 , 'passCount': 3}, {'id': 2 , 'passCount': 4}, {'id': 5 , 'passCount': 7}, {'id': 6, 'passCount': 3}]
b=[{'id': 1 , 'failCount': 1}, {'id': 3 , 'failCount': 2}, {'id': 5 , 'failCount': 3}]

for j in a:
    j.update({'failCount': 0})
    for i in b:
        if i["id"]==j["id"]:
            j.update(i)

print(a)

输出:

[{'id': 1, 'passCount': 3, 'failCount': 1}, {'id': 2, 'passCount': 4, 'failCount': 0}, {'id': 5, 'passCount': 7, 'failCount': 3}, {'id': 6, 'passCount': 3, 'failCount': 0}]

答案 1 :(得分:0)

使用dict.setdefaultdict.update方法的简短解决方案:

l1 = [{'id': 1 , 'passCount': 3}, {'id': 2 , 'passCount': 4}, {'id': 5 , 'passCount': 7}, {'id': 6, 'passCount': 3}]
l2 = [{'id': 1 , 'failCount': 1}, {'id': 3 , 'failCount': 2}, {'id': 5 , 'failCount': 3}]

grouped = {}
for d in l1+l2:
    grouped.setdefault(d['id'], {'failCount':0, 'passCount': 0}).update(d)

result = [d for d in grouped.values()]
print(result)

输出:

[{'passCount': 3, 'id': 1, 'failCount': 1}, {'passCount': 4, 'id': 2, 'failCount': 0}, {'passCount': 0, 'id': 3, 'failCount': 2}, {'passCount': 7, 'id': 5, 'failCount': 3}, {'passCount': 3, 'id': 6, 'failCount': 0}]