python - 将两个列表合并到字典中并对第二个列表的元素求和

标签 python numpy dictionary

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

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

关于python - 将两个列表合并到字典中并对第二个列表的元素求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797668/

相关文章:

python - 让fibo更快

python - 通过 pandas 操作访问组中的特定组

python - 使用 PostMan 时谷歌云签名 url "SignatureDoesNotMatch"但在 Python 中工作正常

python - 在其内容循环中删除顺序NumPy数组索引

python - 向量矩阵乘法的标量向量乘法

c# - 是否可以直接 Linq 到字典?

python - celery 生产优雅重启

python - 将风向分为几类

python - 有没有办法改变数据帧字典中数据帧的列中的值?

python - 制作 Counter.most_common 返回字典