Python:Уменьшение использования памяти словарем

Пытаюсь загрузить в память пару файлов. Файлы имеют один из следующих 3-х форматов:

  • string TAB int
  • string TAB float
  • int TAB float.

Действительно, это файлы статики ngram, на случай, если это поможет с решением. Например:

i_love TAB 10
love_you TAB 12

В настоящее время псевдокод, который я сейчас делаю, таков

loadData(file):
     data = {}
     for line in file:
        first, second = line.split('\t')
        data[first] = int(second) #or float(second)

     return data

К моему большому удивлению, хотя общий размер файлов на диске составляет около 21 мб, при загрузке в память процесс занимает 120 -180 мб памяти! (Все приложение Python не загружает никаких других данных в память).

Существует менее 10 файлов, большинство из них останутся стабильными на уровне около 50-80k строк, за исключением одного файла, который в настоящее время содержит миллионы строк.

Поэтому я хотел бы попросить метод/структуру данных для уменьшения потребления памяти.:

  • Есть ли какие-либо советы по методам сжатия?
  • Если я все еще использую dict, есть ли способ уменьшить объем памяти? Можно ли установить «коэффициент нагрузки», как в Java для Python dict?
  • Если у вас есть какие-то другие структуры данных, я также готов обменять часть скорости на уменьшение памяти. Тем не менее, это приложение чувствительно ко времени, поэтому после того, как пользователи введут свои запросы, я думаю, что было бы не совсем разумно тратить более нескольких секунд на возврат результата. Что касается этого, я все еще поражен тем, как Google удается так быстро выполнять Google Translate:, они, должно быть, используют множество методов + большую мощность серверов?

Большое спасибо. Я с нетерпением жду вашего совета.

45
задан Paul Hoang 22 April 2012 в 04:10
поделиться