Valores de sustitución del diccionario de Python

Tengo un diccionario con más de 20.000 entradas con, por el momento, simplemente la palabra única y el número de veces que la palabra fue utilizada en el texto fuente (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. ¿Existe una manera sencilla de iterar a través de las palabras clave que tienen como valor un número con el fin de reemplazar (mientras investigo el significado)?

El diccionario comienza:

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

Una especie de aplicación que le sugerirá una palabra clave para investigar y definir.

No puede seleccionar valores específicos (o tipos de valores). O bien hace un índice inverso (asigna los números a (listas de) claves) o tiene que hacer un bucle a través de todos los valores cada vez.

Si está procesando los números en un orden arbitrario de todos modos, también puede hacer un bucle a través de todos los elementos:

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

si no, yo iría con el índice inverso:

from collections import defaultdict

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

Ahora puedes buscar las claves por valor:

for key in reverse[value]:
    inputdict[key] = newvalue
Comentarios (4)

Si iteras sobre un diccionario obtienes las claves, así que asumiendo que tu diccionario está en una variable llamada data y tienes alguna función find_definition() que obtiene la definición, puedes hacer algo como lo siguiente:

for word in data:
    data[word] = find_definition(word)
Comentarios (0)
Solución

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 ves que tarda demasiado en recorrer el diccionario, prueba con una función generadora:

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}
Comentarios (2)