Помогите с ускорением цикла сортировки словаря в Python? - PullRequest
0 голосов
/ 29 августа 2011

У меня действительно ужасный цикл в коде, который действительно замедляет мою программу.Цикл в основном выполняет сравнение по словарю, где, если определенный ключ в dict_A такой же, как в dict_B, то для всех совпадений выполняется сортировка, которая записывается в файл.

for k, v in A_dict.items():
    for i, value in B_dict.items():
        if k == value[0]:
            sorted_B = [list(value) for key, value in groupby(sorted(B_dict.values()), key=itemgetter(1,2))]
            outfile.write('{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n'.format (i, k, v, value[1], value[2], value[3])

К сожалению, словари содержат более миллиона статей.Помимо помещения этих данных в базу данных и последующей сортировки, есть ли у кого-нибудь предложения о том, как ускорить этот цикл?Спасибо за помощь.

1 Ответ

1 голос
/ 29 августа 2011

Ваш пример кода может быть неточным, но как написано,

sorted_B = [list(value) for key, value in 
                groupby(sorted(B_dict.values()), key=itemgetter(2,3))]

будет одинаковым каждый раз ... почему оно вообще в цикле?

Также

for k, v in A_dict.items():
    for i, value in B_dict.items():
        if k == value[0]:
            outfile.write('{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n'.format(
                i, k, v, value[1], value[2], value[3])

Похоже, это можно записать как

for i, value in B_dict.items():
    k = value[0]
    if k in A_dict:
        outfile.write('{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n'.format(
            i, k, A_dict[k], value[1], value[2], value[3])

Что должно быть быстрее - это линейное, а не квадратичное время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...