如果我有两个列表(长度相同):

ls1 = ['a','b','c','a','d','c']
ls2 = [1,2,3,5,1,2]

我想得到以下字典(如果是同一个键,则对值求和):
d = {'a':6,'b':2,'c':5,'d':1}

我做了以下工作:
ls1 = np.array(ls1)
ls2 = np.array(ls2)
uniqe_vals = list(set(ls1))
d = {}
for u in uniqe_vals:
    ind = np.where(ls1 == u)[0]
    d[u] = sum(ls2[ind])

对于小数据来说,它工作得很好,但是对于整个数据来说,它花费的时间太长了(我有一个500万左右的列表)。
你对更有效的方法有什么建议吗?

最佳答案

还有一个DefaultDict,但不同且更简单:

from collections import defaultdict

d = defaultdict(int)
for n, v in zip(ls1, ls2):
   d[n] += v

或者,如建议:
from collections import defaultdict
from itertools   import izip

d = defaultdict(int)
for n, v in izip(ls1, ls2):
   d[n] += v

09-17 12:45