Python-Wörterbuch Werte ersetzen

Ich habe ein Wörterbuch mit mehr als 20 000 Einträgen, in dem im Moment nur das einzelne Wort und die Anzahl der Verwendungen des Wortes im Ausgangstext (Dante's Göttliche Komödie auf Italienisch) stehen.

Ich möchte durch alle Einträge arbeiten und den Wert durch eine aktuelle Definition ersetzen, sobald ich sie finde. Gibt es eine einfache Möglichkeit, die Schlüsselwörter zu durchlaufen, die als Wert eine Zahl haben, um sie zu ersetzen (während ich die Bedeutung recherchiere)?

Das Wörterbuch beginnt:

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

Eine Art Anwendung, die ein Stichwort zur Recherche und Definition vorschlägt.

Sie können nicht nach bestimmten Werten (oder Wertetypen) selektieren. Sie müssen entweder einen umgekehrten Index erstellen (Zahlen auf (Listen von) Schlüsseln zurückführen) oder jedes Mal eine Schleife durch alle Werte ziehen.

Wenn Sie ohnehin Zahlen in beliebiger Reihenfolge verarbeiten, können Sie auch alle Elemente in einer Schleife durchlaufen:

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

Ansonsten würde ich den umgekehrten Index verwenden:

from collections import defaultdict

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

Jetzt können Sie die Schlüssel nach Wert suchen:

for key in reverse[value]:
    inputdict[key] = newvalue
Kommentare (4)

Wenn Sie über ein Wörterbuch iterieren, erhalten Sie die Schlüssel. Angenommen, Ihr Wörterbuch befindet sich in einer Variablen namens data und Sie haben eine Funktion find_definition(), die die Definition abruft, können Sie etwas wie das Folgende tun:

for word in data:
    data[word] = find_definition(word)
Kommentare (0)
Lösung

Hier ist eine Funktion, die Ihren Schlüssel findet und Ihren Wert ersetzt.

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)

Die Ausgabe ist:

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

Wenn Sie feststellen, dass es zu lange dauert, Ihr Wörterbuch in einer Schleife zu durchlaufen, versuchen Sie es mit einer Generatorfunktion:

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)

Ausgabe:

{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}
Kommentare (2)