Python: Reduzierung der Speichernutzung des Wörterbuchs

Ich versuche, ein paar Dateien in den Speicher zu laden. Die Dateien haben eines der folgenden 3 Formate:

string TAB intZeichenfolge TAB floatint TAB float.

In der Tat handelt es sich um ngram-statische Dateien, falls dies bei der Lösung hilfreich ist. Zum Beispiel:

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

Derzeit ist der Pseudocode, den ich gerade mache,

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

     return data
</code>

Zu meiner großen Überraschung beläuft sich die Gesamtgröße der Dateien auf der Festplatte auf etwa 21 MB. Beim Laden in den Speicher werden jedoch 120 bis 180 MB Arbeitsspeicher benötigt. (Die gesamte Python-Anwendung lädt keine anderen Daten in den Speicher).

Es gibt weniger als 10 Dateien, von denen die meisten bei etwa 50-80.000 Zeilen stabil bleiben würden, mit Ausnahme einer Datei, die derzeit Millionen Zeilen enthält.

Deshalb möchte ich nach einer Technik / Datenstruktur fragen, um den Speicherverbrauch zu reduzieren:

Irgendwelche Ratschläge für Kompressionstechniken?Gibt es eine Möglichkeit, den Speicher zu verkleinern, wenn ich immer noch dict verwende? Ist es möglich, den "Auslastungsfaktor" wie in Java für Python Dikt einzustellen?Wenn Sie andere Datenstrukturen haben, sind Sie auch bereit, einen Teil der Geschwindigkeit zu tauschen, um den Speicher zu reduzieren. Trotzdem ist dies eine zeitkritische Anwendung, so dass es meiner Meinung nach nicht ganz sinnvoll ist, nach Eingabe der Abfragen mehr als ein paar Sekunden zu brauchen, um das Ergebnis zurückzugeben. Was das angeht, bin ich immer noch erstaunt, wie Google es schafft, den Google Übersetzer so schnell zu erledigen: Sie müssen eine Menge Techniken und viel Serverleistung verwenden.

Vielen Dank. Ich freue mich auf Ihren Rat.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage