J'ai un dictionnaire de plus de 20 000 entrées avec, pour l'instant, simplement le mot unique et le nombre de fois où le mot a été utilisé dans le texte source (la Divine Comédie de Dante en italien).
J'aimerais parcourir toutes les entrées en remplaçant la valeur par une définition réelle au fur et à mesure que je les trouve. Existe-t-il un moyen simple d'itérer parmi les mots-clés dont la valeur est un nombre à remplacer (au fur et à mesure que je recherche la signification) ?
Le dictionnaire commence :
{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc.
Une sorte d'application qui va suggérer un mot-clé à rechercher et à définir.
Vous ne pouvez pas sélectionner des valeurs spécifiques (ou des types de valeurs). Il faut soit créer un index inversé (faire correspondre les nombres à des (listes de) clés), soit passer en boucle toutes les valeurs à chaque fois.
Si vous traitez de toute façon les nombres dans un ordre arbitraire, vous pouvez tout aussi bien parcourir tous les éléments en boucle :
for key, value in inputdict.items():
# do something with value
inputdict[key] = newvalue
sinon, j'opterais pour l'index inverse :
from collections import defaultdict
reverse = defaultdict(list)
for key, value in inputdict.items():
reverse[value].append(key)
Maintenant vous pouvez rechercher les clés par valeur :
for key in reverse[value]:
inputdict[key] = newvalue
Si vous itérez sur un dictionnaire, vous obtenez les clés, donc en supposant que votre dictionnaire est dans une variable appelée data
et que vous avez une fonction find_definition()
qui obtient la définition, vous pouvez faire quelque chose comme ce qui suit :
for word in data:
data[word] = find_definition(word)
Voici une fonction qui trouvera votre clé et remplacera votre valeur.
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)
La sortie est :
{'corse': 378, 'cielo': 209, 'mute': 16}
{'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16}
Si vous trouvez que cela prend trop de temps pour parcourir votre dictionnaire en boucle, essayez une fonction de générateur :
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)
Sortie :
{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}