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.

23
demandé sur Martijn Pieters 2013-11-04 21:37:59

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}
-44
répondu jgranger 2013-11-04 18:32:44

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
41
répondu Martijn Pieters 2013-11-04 17:40:59

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'})
16
répondu Rotareti 2017-12-06 12:42:45

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)
5
répondu Andrew Clark 2013-11-04 17:42:37