Τοποθετήστε το περιεχόμενο αρχείου σε Python λεξικό

ψήφοι
0

Κάθε γραμμή στο αρχείο (περίπου 18 εκατομμύρια γραμμές) αποτελείται από λέξη-> docID, freqID προσπαθώ να το τοποθετείτε στο λεξικό ως δ [λέξη] = [docID, freqID] Εδώ είναι ο κωδικός μου:

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]

λαμβάνοντας του πολύ χρόνο, πώς να επιταχύνει τη διαδικασία, έτσι ώστε να διαβάζει όλα τα περιεχόμενα και τα καταστήματα στο λεξικό σε λιγότερο από ένα λεπτό;

Δημοσιεύθηκε 08/11/2018 στις 00:04
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Δοκιμάστε να χρησιμοποιήσετε μια απλή κανονική έκφραση:

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)

Μπορείτε να σκεφτείτε μια κανονική έκφραση θα είναι αργή, αλλά δεν το χτυπήσει μέχρι να το δοκιμάσετε. Θα μπορούσε να είναι πολύ πιο γρήγορα από ό, τι νομίζετε. (Κατόπιν πάλι, ίσως όχι!)

Χρησιμοποιώντας διάσπαση () μπορεί να δημιουργήσει πρόσθετα λίστες και χορδές που δεν χρησιμοποιείτε, και έτσι αμέσως απορρίψει. Αλλά χρησιμοποιώντας μια κανονική έκφραση, δεν υπάρχουν επιπλέον αντικείμενα που δημιουργούνται, εκτός από αυτά που χρησιμοποιείτε για να συμπληρώσετε dict σας.

Απαντήθηκε 08/11/2018 στις 19:58
πηγή χρήστη

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