Jeg har en ordbok med mer enn 20 000 oppføringer med for øyeblikket bare det unike ordet og antall ganger ordet ble brukt i kildeteksten (Dantes guddommelige komedie på italiensk).
Jeg ønsker å gå gjennom alle oppføringene og erstatte verdien med en faktisk definisjon etter hvert som jeg finner dem. Finnes det en enkel måte å iterere gjennom nøkkelordene som har et tall som verdi for å erstatte (etter hvert som jeg undersøker betydningen)?
Ordboken starter:
{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc.
En slags applikasjon som vil foreslå et søkeord å undersøke og definere.
Du kan ikke velge på spesifikke verdier (eller typer verdier). Du må enten lage en omvendt indeks (kartlegge tall tilbake til (lister over) nøkler) eller du må gå gjennom alle verdier hver gang.
Hvis du uansett behandler tall i vilkårlig rekkefølge, kan du like gjerne løkke gjennom alle elementene:
for key, value in inputdict.items():
# do something with value
inputdict[key] = newvalue
ellers ville jeg brukt den omvendte indeksen:
from collections import defaultdict
reverse = defaultdict(list)
for key, value in inputdict.items():
reverse[value].append(key)
Nå kan du slå opp nøkler etter verdi:
for key in reverse[value]:
inputdict[key] = newvalue
Hvis du itererer over en ordbok, får du nøklene, så forutsatt at ordboken din er i en variabel kalt data
og du har en funksjon find_definition()
som får definisjonen, kan du gjøre noe som følgende:
for word in data:
data[word] = find_definition(word)
Her er en funksjon som finner nøkkelen din og erstatter verdien din.
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)
Resultatet er:
{'corse': 378, 'cielo': 209, 'mute': 16}
{'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16}
Hvis du synes det tar for lang tid å gå gjennom ordboken, kan du prøve en generatorfunksjon:
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)
Output:
{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}