Python: Zmniejszenie wykorzystania pamięci przez słownik

Próbuję załadować kilka plików do pamięci. Pliki mają jeden z trzech następujących formatów:

ciąg TAB intciąg TAB floatint TAB float.

Rzeczywiście, są to pliki statyczne ngram, w przypadku gdy to pomaga w rozwiązaniu. Na przykład:

<code>i_love TAB 10
love_you TAB 12
</code>

Obecnie pseudokodem, który teraz robię, jest

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

     return data
</code>

Ku mojemu zaskoczeniu, podczas gdy całkowity rozmiar plików na dysku wynosi około 21 MB, po załadowaniu do pamięci proces zajmuje 120 - 180 mb pamięci! (cała aplikacja Pythona nie ładuje żadnych innych danych do pamięci).

Jest mniej niż 10 plików, większość z nich pozostanie stabilna przy około 50-80k liniach, z wyjątkiem jednego pliku, który obecnie ma miliony linii.

Chciałbym więc poprosić o technikę / strukturę danych w celu zmniejszenia zużycia pamięci:

Wszelkie porady dotyczące technik kompresji?Jeśli nadal używam dyktatu, czy istnieje sposób na zmniejszenie pamięci? Czy jest możliwe ustawienie „współczynnika obciążenia” tak jak w Javie dla dyktatu Pythona?Jeśli masz jakieś inne struktury danych, chętnie zamienisz część prędkości na zmniejszenie pamięci. Niemniej jednak jest to aplikacja czasochłonna, więc gdy użytkownicy wprowadzą swoje zapytania, myślę, że nie byłoby rozsądne, aby zwrócić wynik w ciągu kilku sekund. W związku z tym nadal jestem zdumiony, jak Google radzi sobie z Google Translate tak szybko: muszą korzystać z wielu technik i dużej ilości serwerów?

Dziękuję Ci bardzo. Czekam na twoją radę.

questionAnswers(6)

yourAnswerToTheQuestion