Legen Sie Dateiinhalt in ein Wörterbuch Python

stimmen
0

Jede Zeile in der Datei (rund 18 Millionen Zeilen) besteht aus word-> docID, freqID Ich versuche es in Wörterbuch als d [Wort] zu laden = [docID, freqID] Hier ist mein Code:

lex = dict()
with open('word.txt') as f:
    for a in f:
        # tab = []
        word = a.split(-)[0]
        freqID = int(a.split(,)[1])
        docID = int(a[a.find(>)+1:a.find(,)])
        lex[word] = [docID, freqID]

Seine viel Zeit nehmen, wie man den Prozess zu beschleunigen, so liest es alle Inhalte und speichert im Wörterbuch in weniger als einer Minute?

Veröffentlicht am 08/11/2018 um 00:04
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Versuchen Sie, einen einfachen regulären Ausdruck:

import re
lineRegExp = re.compile(r'(\w+)->(\d+),(\d+)' + '\n?')

lex = dict()
with open('blah.txt') as f:
    for line in f:
        try:
            word, freqId, docId = lineRegExp.match(line).groups()
            lex[word] = [int(freqId), int(docId)]
        except AttributeError:
            print("No match found in line:", line, end='')

print(lex)

Man könnte denken, ein regulärer Ausdruck langsam sein würde, aber klopft es nicht, bis Sie es ausprobieren. Es könnte viel schneller, als Sie denken. (Dann wieder, vielleicht auch nicht!)

Mit split () können Extras Listen und Strings erstellen, die Sie nicht verwenden, und so sofort verwerfen. Aber durch einen regulären Ausdruck verwenden, werden keine zusätzlichen Objekte erstellt, andere als die, die Sie dict bevölkern verwenden.

Beantwortet am 08/11/2018 um 19:58
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more