Python dictionary remplacer les valeurs
j'ai un dictionnaire avec plus de 20 000 entrées avec en ce moment simplement le mot unique et le nombre de fois où le mot a été utilisé dans le texte source (divine comédie de Dante en italien).
je voudrais retravailler toutes les entrées en remplaçant la valeur par une définition réelle comme je les trouve. Y a-t-il un moyen simple d'itérer à travers les mots-clés qui ont comme valeur un nombre afin de remplacer (comme je recherche la signification)?
Le dictionnaire commence:
{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc.
sorte d'application qui suggérera un mot-clé pour rechercher et définir.
4 réponses
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 qu'il est trop long pour faire une boucle dans votre dictionnaire essayez un générateur de fonction:
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}
vous ne pouvez pas sélectionner des valeurs spécifiques (ou des types de valeurs). Vous pouvez soit faire un index inversé (les numéros de carte de retour vers (les listes de) clés) ou vous devez boucler à travers valeurs à chaque fois.
si vous traitez des nombres dans un ordre arbitraire de toute façon, vous pouvez aussi bien boucler tous les éléments:
for key, value in inputdict.items():
# do something with value
inputdict[key] = newvalue
sinon j'utiliserais l'index inverse:
from collections import defaultdict
reverse = defaultdict(list)
for key, value in inputdict.items():
reverse[value].append(key)
vous pouvez Maintenant rechercher des clés par valeur:
for key in reverse[value]:
inputdict[key] = newvalue
au cas où vous avez besoin d'un déclarative la solution, vous pouvez utiliser dict.update()
pour modifier les valeurs dans un dict.
my_dict.update({'corse': 'my new definition'})
Si vous parcourez un dictionnaire vous obtenez les clés, donc en supposant que votre dictionnaire est dans une variable appelée data
et 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)