时间:2019-03-19 12:21:36

标签: python python-3.x vectorization

这是我用于遍历“ ListOfDocuments ”的代码,该列表是 500,000 个字典的列表。这些字典中的每一个都有大约30个键值对。

    for document in ListOfDocuments:
        for field in document:
            if(field=="USELESS"):
                continue
            ExtraList[AllParameters[field]] = document[field]
        ExtraList[AllParameters["C_Name"]] = filename.split(".")[0]
        AppendingDataframe.loc[len(AppendingDataframe)] = ExtraList

我想做的是,将所有可能的列名称存储在 AllParameters 中,遍历ListOfDocuments,然后遍历获得的字典,然后迭代每个键值对并保存它们在 ExtraList 中,我最后将其附加在 AppendingDataframe中。

即使在最强大的机器上,这种方法也非常慢,我知道这不是正确的方法。任何帮助将不胜感激。

编辑: 样本文档看起来像具有30个以上键的普通键值。

例如

{'FKey':12,'Skey':22,'NConfig':'NA','SCHEMA':'CD123 ...}

我想提取并存储各个键值对。

2 个答案:

答案 0 :(得分:4)

创建线程。您可以找出需要浏览的文件数量,并可能将其拆分为4个线程。这将使处理过程更快,因为它将允许同时阅读文档

您可以先创建一个接受文件列表的方法,然后遍历这些文件。然后,您可以将主列表的几个部分传递给该方法,然后在线程中运行它们。那应该可以大大提高速度

答案 1 :(得分:1)

您可以通过实现处理列表的单个条目然后使用多重处理的功能来实现此目的:

import multiprocessing as multi
from multiprocessing import Manager

manager = Manager()

data = manager.list([])

def func(a):          #Implement here the function 
    data.append(a)    #that processes one dict from the list

p = multi.Pool(processes=16)
p.map(func, ListOfDocuments)

print data