Diccionario de Python reemplazar valores

Tengo un diccionario con más de 20 000 entradas con en este momento simplemente la palabra única y el número de veces que la palabra se usó en el texto de origen (la Divina Comedia de Dante en italiano).

Me gustaría trabajar a través de todas las entradas reemplazando el valor con una definición real a medida que las encuentro. ¿Hay una forma sencilla de iterar a través de las palabras clave que tienen como valor un número para reemplazar (a medida que investigo el significado)?

El diccionario comienza:

{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc. 

Tipo de una aplicación que sugerirá una palabra clave para investigar y definir.

Aquí hay una función que encontrará su clave y reemplazará su valor.

 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 salida es:

 {'corse': 378, 'cielo': 209, 'mute': 16} {'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16} 

Si encuentra que está tomando demasiado tiempo para recorrer su diccionario, pruebe una función de generador:

 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) 

Salida:

 {'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16} 

No puede seleccionar valores específicos (o tipos de valores). Haría un índice inverso (los números del mapa volverían a las (listas de) teclas) o tendría que recorrer todos los valores cada vez.

De todos modos, si está procesando números en orden arbitrario, también puede recorrer todos los elementos:

 for key, value in inputdict.items(): # do something with value inputdict[key] = newvalue 

De lo contrario, me gustaría ir con el índice inverso:

 from collections import defaultdict reverse = defaultdict(list) for key, value in inputdict.items(): reverse[value].append(key) 

Ahora puedes buscar claves por valor:

 for key in reverse[value]: inputdict[key] = newvalue 

En caso de que necesite una solución declarativa , puede usar dict.update() para cambiar los valores en un dict.

 my_dict.update({'corse': 'my new definition'}) 

Si recorres un diccionario, obtienes las claves, por lo que suponiendo que el diccionario se encuentre en una variable llamada data y que tenga alguna función find_definition() que obtenga la definición, puedes hacer algo como lo siguiente:

 for word in data: data[word] = find_definition(word)