Eu tenho um dicionário com mais de 20 000 entradas com no momento simplesmente a palavra única e o número de vezes que a palavra foi usada no texto fonte (Dante's Divine Comedy em italiano).
Gostaria de trabalhar em todas as entradas substituindo o valor por uma definição real, à medida que as encontro. Existe uma maneira simples de iterar através das palavras-chave que têm como valor um número a fim de substituir (enquanto pesquiso o significado)?
O dicionário começa:
{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc.
Tipo de aplicação que irá sugerir uma palavra-chave para pesquisar e definir.
Não é possível selecionar sobre valores específicos (ou tipos de valores). Você'd ou faz um índice inverso (números do mapa de volta para (listas de) chaves) ou você tem que fazer um loop através de todos os valores todas as vezes.
Se você estiver processando números em ordem arbitrária de qualquer maneira, você pode também fazer um loop através de todos os itens:
for key, value in inputdict.items():
# do something with value
inputdict[key] = newvalue
caso contrário I'd iria com o índice inverso:
from collections import defaultdict
reverse = defaultdict(list)
for key, value in inputdict.items():
reverse[value].append(key)
Agora você pode procurar chaves por valor:
for key in reverse[value]:
inputdict[key] = newvalue
Se você iterar sobre um dicionário você recebe as chaves, então assumindo que seu dicionário está em uma variável chamada dados' e você tem alguma função
find_definition()` que recebe a definição, você pode fazer algo como o seguinte:
for word in data:
data[word] = find_definition(word)
Aqui está uma função que vai encontrar a sua chave e substituir o seu 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)
A saída é:
{'corse': 378, 'cielo': 209, 'mute': 16}
{'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16}
Se você achar que está demorando muito para percorrer o seu dicionário, tente uma função de gerador:
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)
Saída:
{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}