如何添加所有词典,并进行新的词典?

时间:2017-04-05 04:33:28

标签: python dictionary

“数据收集”中有8个词典,我想将它们添加起来并执行新词典'结果'

正如我的代码所示:

for countres in datagather:
    #print (countres)
    for key in counts:
        results[key]+=countres[key]

在datagather中,如果运行print (countres),结果将为:

{'other': 107, 'C4': 1, 'C3': 1, 'A2': 1, 'D3': 1, 'A3': 0, 'C5': 0, 'B3': 2, 'A1': 0, 'B4': 0, 'A4': 0, 'D5': 0, 'B1': 2, 'C1': 1, 'D4': 0, 'B2': 3, 'C2': 7}
{'other': 109, 'C4': 0, 'C3': 3, 'A2': 0, 'D3': 0, 'A3': 1, 'C5': 0, 'B3': 1, 'A1': 0, 'D5': 0, 'A4': 0, 'B4': 1, 'B1': 2, 'C1': 0, 'D4': 0, 'B2': 3, 'C2': 7}
{'other': 116, 'C4': 1, 'C3': 2, 'A2': 0, 'D3': 0, 'A3': 0, 'B4': 0, 'B3': 1, 'C5': 0, 'A1': 0, 'D5': 0, 'A4': 0, 'B1': 0, 'C1': 0, 'D4': 0, 'B2': 3, 'C2': 1}
{'other': 104, 'C4': 0, 'C3': 3, 'A2': 0, 'D3': 1, 'A3': 0, 'C5': 0, 'B3': 2, 'A1': 0, 'B4': 1, 'A4': 0, 'D5': 1, 'B1': 1, 'C1': 0, 'D4': 0, 'B2': 3, 'C2': 7}
{'other': 108, 'C4': 2, 'C3': 2, 'A2': 0, 'D3': 1, 'A3': 0, 'C5': 0, 'B3': 0, 'A1': 0, 'D5': 0, 'A4': 0, 'B4': 0, 'B1': 0, 'C1': 0, 'D4': 0, 'B2': 6, 'C2': 7}
{'other': 105, 'C4': 0, 'C3': 1, 'A2': 0, 'D3': 0, 'A3': 0, 'C5': 0, 'B3': 1, 'A1': 0, 'B4': 0, 'A4': 0, 'D5': 0, 'B1': 2, 'C1': 0, 'D4': 1, 'B2': 4, 'C2': 9}
{'other': 109, 'C4': 1, 'C3': 0, 'A2': 0, 'D3': 1, 'A3': 0, 'C5': 1, 'B3': 0, 'A1': 0, 'D5': 0, 'A4': 0, 'B4': 0, 'B1': 0, 'C1': 0, 'D4': 1, 'B2': 6, 'C2': 7}
{'other': 104, 'C4': 2, 'C3': 3, 'A2': 1, 'D3': 0, 'A3': 1, 'C5': 0, 'B3': 1, 'A1': 0, 'D5': 0, 'A4': 0, 'B4': 0, 'B1': 0, 'C1': 0, 'D4': 0, 'B2': 8, 'C2': 5}

他们都有相同的关键'和不同的值

2 个答案:

答案 0 :(得分:2)

这里有几个选项,我认为Counter是最漂亮的。

使用defaultdict

import collections
results = collections.defaultdict(int)
for di in datagather:
    for key in di:
        results[key] += di[key]
print(dict(results))

使用Counter

import collections
results = collections.Counter()
for di in datagather:
    results.update(di)
print(dict(results))

最后,您可以编写自己的collections

results = {}
for di in datagather:
    for key in di:
        if key in results:
            results[key] += di[key]
        else:
            results[key] = di[key]
print(results)

答案 1 :(得分:1)

您可以使用Counter中的collections对象,这是一个类似字典的对象,将在更新时求和。

from collections import Counter
counters = (
    {'other': 107, 'C4': 1, 'C3': 1, 'A2': 1, 'D3': 1, 'A3': 0, 'C5': 0, 'B3': 2, 'A1': 0, 'B4': 0, 'A4': 0, 'D5': 0, 'B1': 2, 'C1': 1, 'D4': 0, 'B2': 3, 'C2': 7},
    {'other': 109, 'C4': 0, 'C3': 3, 'A2': 0, 'D3': 0, 'A3': 1, 'C5': 0, 'B3': 1, 'A1': 0, 'D5': 0, 'A4': 0, 'B4': 1, 'B1': 2, 'C1': 0, 'D4': 0, 'B2': 3, 'C2': 7},
    {'other': 116, 'C4': 1, 'C3': 2, 'A2': 0, 'D3': 0, 'A3': 0, 'B4': 0, 'B3': 1, 'C5': 0, 'A1': 0, 'D5': 0, 'A4': 0, 'B1': 0, 'C1': 0, 'D4': 0, 'B2': 3, 'C2': 1},
    {'other': 104, 'C4': 0, 'C3': 3, 'A2': 0, 'D3': 1, 'A3': 0, 'C5': 0, 'B3': 2, 'A1': 0, 'B4': 1, 'A4': 0, 'D5': 1, 'B1': 1, 'C1': 0, 'D4': 0, 'B2': 3, 'C2': 7},
    {'other': 108, 'C4': 2, 'C3': 2, 'A2': 0, 'D3': 1, 'A3': 0, 'C5': 0, 'B3': 0, 'A1': 0, 'D5': 0, 'A4': 0, 'B4': 0, 'B1': 0, 'C1': 0, 'D4': 0, 'B2': 6, 'C2': 7},
    {'other': 105, 'C4': 0, 'C3': 1, 'A2': 0, 'D3': 0, 'A3': 0, 'C5': 0, 'B3': 1, 'A1': 0, 'B4': 0, 'A4': 0, 'D5': 0, 'B1': 2, 'C1': 0, 'D4': 1, 'B2': 4, 'C2': 9},
    {'other': 109, 'C4': 1, 'C3': 0, 'A2': 0, 'D3': 1, 'A3': 0, 'C5': 1, 'B3': 0, 'A1': 0, 'D5': 0, 'A4': 0, 'B4': 0, 'B1': 0, 'C1': 0, 'D4': 1, 'B2': 6, 'C2': 7},
    {'other': 104, 'C4': 2, 'C3': 3, 'A2': 1, 'D3': 0, 'A3': 1, 'C5': 0, 'B3': 1, 'A1': 0, 'D5': 0, 'A4': 0, 'B4': 0, 'B1': 0, 'C1': 0, 'D4': 0, 'B2': 8, 'C2': 5})

c = Counter()
for d in counters:
    c.update(d)

结果:

Counter({'A1': 0,
         'A2': 2,
         'A3': 2,
         'A4': 0,
         'B1': 7,
         'B2': 36,
         'B3': 8,
         'B4': 2,
         'C1': 1,
         'C2': 50,
         'C3': 15,
         'C4': 7,
         'C5': 1,
         'D3': 4,
         'D4': 2,
         'D5': 1,
         'other': 862})