Найти - Пользователи
Полная версия: Инвертирование большого словаря
Начало » Python для новичков » Инвертирование большого словаря
1
$m1t
Есть набор файлов f_1,…f_N, N~10^6, в каждом из которых есть набор id-шек. id- это некоторое целое число от 1 до 10^6–10^7. В каждом файле относительно мало id-шек, не меньше 5 штук, в среднем около 100, максимум 10^4.
Так вот, теперь вопрос – как построить словарь в котором по каждой id-шке будут храниться номера файлов, в которых она содержится?
Наивный подход – считать все в словарь и циклом строить новый, дико тормозит, хотя бы потому, что этот словарь не лезет в оперативку.
Что в этом случае можно сделать?
PooH
можно попробывать использовать встроенный модуль anydbm, интерфейс практически такой же как и у словаря, но данные хранит в файле на диске
Ed
Поместится ли в память результат? Если да, то просто читайте из файлов последовательно по одному файлу за раз и заполняйте словарь-результат. Если не лезет, то используйте какую-нить СУБД. Алгоритм тот же, только вместо словаря пишите результат в базу. Если читать по одному файлу за раз медленно, то читайте по несколько параллельно.
$m1t
Всем спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB