Αντικατάσταση τιμών λεξικού Python

Έχω ένα λεξικό με 20.000 και πλέον καταχωρήσεις με προς το παρόν απλώς τη μοναδική λέξη και τον αριθμό των φορών που χρησιμοποιήθηκε η λέξη στο αρχικό κείμενο (η Θεία Κωμωδία του Δάντη στα ιταλικά).

Θα ήθελα να δουλέψω μέσα από όλες τις καταχωρήσεις αντικαθιστώντας την τιμή με έναν πραγματικό ορισμό καθώς τις βρίσκω. Υπάρχει ένας απλός τρόπος να επαναλάβω τις λέξεις-κλειδιά που έχουν ως τιμή έναν αριθμό προκειμένου να τον αντικαταστήσω (καθώς ερευνώ την έννοια);

Το λεξικό αρχίζει:

{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21}  # etc.

Ένα είδος εφαρμογής που θα προτείνει μια λέξη-κλειδί για έρευνα και ορισμό.

Δεν μπορείτε να επιλέξετε συγκεκριμένες τιμές (ή τύπους τιμών). Θα πρέπει είτε να κάνετε ένα αντίστροφο ευρετήριο (να αντιστοιχίσετε τους αριθμούς πίσω σε (λίστες) κλειδιών) είτε να κάνετε βρόχο σε όλες τις τιμές κάθε φορά.

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

for key, value in inputdict.items():
    # do something with value
    inputdict[key] = newvalue

Διαφορετικά, θα χρησιμοποιούσα το αντίστροφο ευρετήριο:

from collections import defaultdict

reverse = defaultdict(list)
for key, value in inputdict.items():
    reverse[value].append(key)

Τώρα μπορείτε να αναζητήσετε τα κλειδιά με βάση την τιμή:

for key in reverse[value]:
    inputdict[key] = newvalue
Σχόλια (4)

Αν κάνετε επανάληψη σε ένα λεξικό παίρνετε τα κλειδιά, οπότε αν υποθέσουμε ότι το λεξικό σας βρίσκεται σε μια μεταβλητή που ονομάζεται data και έχετε κάποια συνάρτηση find_definition() που παίρνει τον ορισμό, μπορείτε να κάνετε κάτι σαν το ακόλουθο:

for word in data:
    data[word] = find_definition(word)
Σχόλια (0)
Λύση

Εδώ είναι μια συνάρτηση που θα βρει το κλειδί σας και θα αντικαταστήσει την τιμή σας.

current_dict = {'corse': 378, 'cielo': 209, 'mute': 16}
print(current_dict)
def replace_value_with_definition(key_to_find, definition):
    for key in current_dict.keys():
        if key == key_to_find:
            current_dict[key] = definition

replace_value_with_definition('corse', 'Definition of "corse"')
print(current_dict)

Η έξοδος είναι:

{'corse': 378, 'cielo': 209, 'mute': 16}
{'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16}

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

def gen_replace_value_with_definition(key_to_find, definition):
    for key in current_dict.keys():
        if key == key_to_find:
            current_dict[key] = definition
            yield True
    yield False

found = False
while not found:
    found = next(gen_replace_value_with_definition('corse', 'Definition of "corse" via generator'))

print(current_dict)

Έξοδος:

{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}
Σχόλια (2)