Python woordenboek vervang waarden

Ik heb een woordenboek met meer dan 20 000 ingangen met op het ogenblik alleen het unieke woord en het aantal keren dat het woord in de brontekst is gebruikt (Dante's Goddelijke Komedie in het Italiaans).

Ik zou graag door alle entries heen willen werken en de waarde vervangen door een actuele definitie als ik ze vind. Is er een eenvoudige manier om te itereren door de trefwoorden die als waarde een nummer hebben om te vervangen (terwijl ik de betekenis onderzoek)?

Het woordenboek begint:

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

Een soort toepassing die een trefwoord voorstelt om te onderzoeken en te definiëren.

Je kunt niet selecteren op specifieke waarden (of soorten waarden). Je'zou ofwel een omgekeerde index maken (nummers terug mappen naar (lijsten van) sleutels) of je moet elke keer door alle waarden lopen.

Als je toch al getallen in willekeurige volgorde verwerkt, kun je net zo goed alle items doorlussen:

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

anders zou ik voor de omgekeerde index gaan:

from collections import defaultdict

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

Nu kun je sleutels op waarde opzoeken:

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

Als je over een woordenboek itereert, krijg je de sleutels, dus als je aanneemt dat je woordenboek in een variabele genaamd data zit en je hebt een functie find_definition() die de definitie ophaalt, dan kun je iets als het volgende doen:

for word in data:
    data[word] = find_definition(word)
Commentaren (0)
Oplossing

Hier is een functie die je sleutel zal vinden en je waarde zal vervangen.

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)

De output is:

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

Als je vindt dat het te lang duurt om door je woordenboek te lopen, probeer dan een generator functie:

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)

Uitvoer:

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