Ho un dizionario con più di 20 000 voci con al momento semplicemente la parola unica e il numero di volte che la parola è stata usata nel testo di partenza (la Divina Commedia di Dante in italiano).
Vorrei lavorare attraverso tutte le voci sostituendo il valore con una definizione effettiva man mano che le trovo. C'è un modo semplice per iterare attraverso le parole chiave che hanno come valore un numero per sostituirle (man mano che ne cerco il significato)?
Il dizionario inizia:
{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc.
Una specie di applicazione che suggerisce una parola chiave da ricercare e definire.
Non puoi selezionare su valori specifici (o tipi di valori). Dovresti fare un indice inverso (mappare i numeri a (liste di) chiavi) o devi fare un loop attraverso tutti i valori ogni volta.
Se stai comunque elaborando i numeri in ordine arbitrario, potresti anche fare un loop attraverso tutti gli elementi:
for key, value in inputdict.items():
# do something with value
inputdict[key] = newvalue
altrimenti userei l'indice inverso:
from collections import defaultdict
reverse = defaultdict(list)
for key, value in inputdict.items():
reverse[value].append(key)
Ora puoi cercare le chiavi per valore:
for key in reverse[value]:
inputdict[key] = newvalue
Se si itera su un dizionario si ottengono le chiavi, quindi supponendo che il vostro dizionario sia in una variabile chiamata data
e che abbiate una funzione find_definition()
che ottiene la definizione, potete fare qualcosa come la seguente:
for word in data:
data[word] = find_definition(word)
Ecco una funzione che troverà la vostra chiave e sostituirà il vostro valore.
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)
L'output è:
{'corse': 378, 'cielo': 209, 'mute': 16}
{'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16}
Se trovate che ci voglia troppo tempo per scorrere il vostro dizionario, provate una funzione generatrice:
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)
Uscita:
{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}