У меня есть большой файл (около 1 ГБ), который я читал так, чтобы создать словарь отсортированных списков. Мне нужны списки для сортировки, чтобы я мог их искать позже. Это будут запросы предшественника (в которых индекс имеет наибольшее значение, меньшее x), поэтому я не могу использовать наборы.Как ускорить создание большого словаря
A = defaultdict(list)
B = defaultdict(list)
filename = sys.argv[1]
with open(filename) as fin:
lines = list(fin)
for line in lines:
vals=line.split()
vals[2] = int(vals[2])
bisect.insort_left(A[vals[1]],vals[2]]
bisect.insort_left(B[vals[0]],vals[2]]
К сожалению, это слишком медленно.
Профилирование Я вижу, что почти все время тратится на звонок bisect.insort_left
.
Есть ли способ ускорить это?
Стоит ли добавлять несортированные элементы, а затем сортировать их потом? Если да, то как вы можете отсортировать все списки в словаре списков?
Почему вы сначала читаете файл, * затем * перебираете строки? Почему бы просто не зациклиться на файле? –
Затем я должен снова перебрать файл, используя словари, которые я сделал. –
^То же, что сказал Мартийн. Вы превращаете свой большой файл в большой список с помощью 'lines = list (fin)'. Файлы можно открывать и повторять, не превращая сначала файл в список. Вы должны отрезать эту строку и перейти прямо к: 'для строки в плавнике:' – erewok