Как я могу ускорить / заменить мою двойную петлю? - PullRequest
0 голосов
/ 19 марта 2019

Это мой код для перебора " ListOfDocuments ", который представляет собой список из более чем 10000 * 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 следует цикл по полученному dict, затем повторение каждой пары ключ-значение и сохранение их в ExtraList , который я наконец добавляю в AppendingDataframe.

Этот подходочень медленный даже на самых мощных машинах, и я знаю, что это неправильный способ сделать это.Любая помощь будет принята с благодарностью.

Редактировать: Образец документа выглядит как обычное значение ключа с более чем 30 клавишами.

Например,

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

И я хотел бы извлечь и сохранить индивидуальное значение ключапар.

Ответы [ 2 ]

4 голосов
/ 19 марта 2019

Создать темы. Вы можете узнать, сколько файлов вам нужно просмотреть, и, возможно, разделить их на 4 потока. Это значительно ускорит процесс, поскольку позволит одновременно читать документы

Вы можете начать с создания метода, который принимает список файлов, а затем перебирает их. Затем вы можете передать несколько разделов основного списка методу и запустить их в потоках. Это должно обеспечить приличное увеличение скорости

1 голос
/ 19 марта 2019

Вы можете реализовать это, реализовав функцию, которая обрабатывает одну запись в списке и затем использует многопроцессорность:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...