关于python:计算包含多行dicts的numpy数组中所有唯一值的总和

Computing the sum of all unique values in a numpy array containing rows of dicts

我有一个大的numpy数组,每一行包含一个单词的dict,其格式与下面类似:

1
data = [{'a': 1, 'c': 2}, {'ba': 3, 'a': 4}, ... }

有人能给我指出正确的方向吗?我该如何计算numpy数组每行中dict的所有唯一值的总和?从上面的例子中,我希望得到如下的结果:

1
result = {'a': 5, 'c': 2, 'ba': 3, ...}

目前,我能想到的唯一方法是遍历数据的每一行,然后遍历dict的每个键,如果找到唯一键,则将其附加到新dict并设置值;如果找到dict中已包含的键,则将该键的值添加到"result"中的键。尽管这似乎是一种效率低下的方法。


您可以使用Counter()并使用data中包含的每个字典在循环中对其进行更新:

1
2
3
4
5
6
from collections import Counter

data = [{'a': 1, 'c': 2}, {'ba': 3, 'a': 4}]
c = Counter()
for d in data:
    c.update(d)

输出:

1
Counter({'a': 5, 'ba': 3, 'c': 2})

。备用一个衬里:

(由@antonvbr在评论中提出)

1
sum((Counter(dict(x)) for x in data), Counter())


使用for-loops的纯python解决方案:

1
2
3
4
5
6
7
8
data = [{'a': 1, 'c': 2}, {'ba': 3, 'a': 4}]
result = {}
for d in data:
    for k, v in d.items():
        if k in result:
            result[k] += v
        else:
            result[k] = v

输出:

1
{'c': 2, 'a': 5, 'ba': 3}