虽然,其他人也问过类似的问题,例如。在这里,但它们略有不同,并没有真正解决我的问题,所以我又来了。
我有 N 个列表(N>20,000),每个列表包含 M 个列表(M >20,000),方式如下(数据是虚拟的):
Key1: [ [4,3,1], [5,1,0] ...... [43,21,0 ] ] # List 1 with collection of M smaller lists
:
:
KeyN: [ [5,4,1], [55,1,1] ...... [ 221, 0, 0] ] # Nth list
数据未排序。逐个迭代阈值列表,例如Threshold =[2, 3, 5, 7, 8]
,在中间元素上应用阈值时,我想为所有键提取大于阈值的所有元素。例如。根据我上面写的数据,Threshold = 2
会产生
For Key1: [ [4,3,1], [43,21,0]]
:
:
For KeyN: [[5,4,1]]
对于其他阈值也是如此。由于列表太多,我的观察是排序会导致大量开销,因此我想避免它。在python中执行此操作的最佳方法是什么?另一个重要的一点是,我自己构建数据,所以可能有更好的数据结构来存储数据。我目前将数据以容器的形式存储在PersistentList
中Btree
,ZODB
这是在此处建议的。以下是用于它的代码片段:
for Gnodes in G.nodes(): # Gnodes iterates over N values
Gvalue = someoperation(Gnodes)
for Hnodes in H.nodes(): # Hnodes iterates over N values
Hvalue =someoperation(Hnodes,Gnodes)
score = SomeOperation on (Gvalue,Hvalue)
btree_container.setdefault(Gnodes, PersistentList()).append([Hnodes, score, -1 ])
transaction.savepoint(True)
transaction.commit()
关于什么应该是最有效的方法的任何建议?首先排序确实是最佳方式吗?