尽管其他人也问过类似的问题,例如, here,但它们略有不同,并没有真正解决我的问题,所以我在这里再次。
我有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的形式将数据存储在ZODB容器中的PLACEHOLDER_FOR_CODE_7容器中,建议使用here。以下是用于它的代码片段:
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()对于什么应该是最有效的方式提出任何建议?首先确定最佳方式吗?