Уведомления

Группа в Telegram: @pythonsu

#1 Июль 17, 2009 01:09:21

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Инвертирование большого словаря

Есть набор файлов f_1,…f_N, N~10^6, в каждом из которых есть набор id-шек. id- это некоторое целое число от 1 до 10^6–10^7. В каждом файле относительно мало id-шек, не меньше 5 штук, в среднем около 100, максимум 10^4.
Так вот, теперь вопрос – как построить словарь в котором по каждой id-шке будут храниться номера файлов, в которых она содержится?
Наивный подход – считать все в словарь и циклом строить новый, дико тормозит, хотя бы потому, что этот словарь не лезет в оперативку.
Что в этом случае можно сделать?



Офлайн

#2 Июль 17, 2009 07:36:01

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Инвертирование большого словаря

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



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

Офлайн

#3 Июль 17, 2009 13:44:01

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Инвертирование большого словаря

Поместится ли в память результат? Если да, то просто читайте из файлов последовательно по одному файлу за раз и заполняйте словарь-результат. Если не лезет, то используйте какую-нить СУБД. Алгоритм тот же, только вместо словаря пишите результат в базу. Если читать по одному файлу за раз медленно, то читайте по несколько параллельно.



Офлайн

#4 Июль 18, 2009 02:52:15

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Инвертирование большого словаря

Всем спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version