所以,我有一个dicts列表,但我试图将这些值移到稀疏矩阵上:
matrix = [[0]*large for i in xrange(small)] #large is like 150k and small is about 10k
所以,为了得到这个值,我有一个所有唯一键的dict,其长度等于大,这决定了映射到各个dicts中的键的值将基于索引的位置,所以:
for i in range(len(lst)):
dic = lst[i]
for key in dic.keys():
vectors[i][ordering.index(key)] = dic.get(key, 0)
但这需要很长时间才能完成。就像永远。 (Ordering是一个dict,它是所有dicts的合并副本......但是我希望数据作为稀疏矩阵,而不是作为dict,但我使用它来了解我应该用于稀疏矩阵的键的索引)
答案 0 :(得分:1)
ordering
可能是原因。
根据您使用它的方式,排序只是一个列表,但ordering.index(key)
必须对列表进行全面扫描才能找到索引。
将其更改为字典,并将指定的索引作为值,如下所示:
ordering_dict = {}
for i in range(len(ordering)):
ordering_dict[ordering[i]] = i
然后将您的作业更改为:
vectors[i][ordering[key]] = dic.get(key, 0)
这将删除每个赋值的len(订购)的整个迭代的等价物,这意味着len(lst)* len(dic)* len(排序)更少的总操作。