如何加速/更换双for循环?

2024-10-01 15:29:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我迭代“ListOfDocuments”的代码,它是一个超过500000个dict的列表。每个dict都有大约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中,循环遍历文档列表,然后循环遍历获得的dict,然后迭代每个键值对,并将它们保存在ExtraList中,最后将其追加到AppendingDataframe中。

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

编辑: 一个示例文档看起来像一个包含30多个键的普通键值。你知道吗

例如

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

我想提取并存储各个键值对。你知道吗


Tags: 方法代码in文档field列表forif
2条回答

您可以通过实现一个函数来实现这一点,该函数处理列表的单个条目,然后使用多处理:

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

制造螺纹。您可以找出需要浏览的文件数量,并可能将其拆分为4个线程。这将使该过程更快,因为它将允许同时读取文档

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

相关问题 更多 >

    热门问题