如果我有两个列表(长度相同):
我希望得到以下字典(如果是相同的键,则对值求和):
我做了以下事情:
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万的列表)需要太长时间。你有没有更有效的方法建议?
np.where
有多高效,但如果没有numpy,我会将d设置为defaultdict(int)
,然后简单地迭代izip(ls1,ls2)
并将来自ls2的值添加到具有ls1键的字典元素中。这只是一个猜测,可能比你的解决方案要低效得多。 - L3viathan