Man ir vārdnīca ar vairāk nekā 20 000 ierakstu, kurā pašlaik ir tikai unikāls vārds un vārdu lietojumu skaits avota tekstā (Dantes "Dievišķā komēdija" itāļu valodā).
Es gribētu strādāt ar visiem ierakstiem, aizstājot vērtību ar faktisko definīciju, kad es tos atradu. Vai ir kāds vienkāršs veids, kā iterēt pa atslēgvārdiem, kuru vērtība ir skaitlis, lai aizstātu (kamēr es izpētu nozīmi)?
Vārdnīca sākas:
{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc.
Tāda veida lietojumprogramma, kas piedāvās atslēgvārdu, ko izpētīt un definēt.
Nav iespējams atlasīt konkrētas vērtības (vai vērtību veidus). Jums vai nu jāizveido reversais indekss (jāsalāgo skaitļi atpakaļ uz (atslēgu) sarakstiem), vai arī katru reizi ir jāizveido cilpa caur visām vērtībām.
Ja jūs tik un tā apstrādājat skaitļus patvaļīgā secībā, jūs varat izmantot cilpu caur visiem elementiem:
for key, value in inputdict.items():
# do something with value
inputdict[key] = newvalue
pretējā gadījumā es izvēlētos apgriezto indeksu:
from collections import defaultdict
reverse = defaultdict(list)
for key, value in inputdict.items():
reverse[value].append(key)
Tagad jūs varat meklēt atslēgas pēc vērtības:
for key in reverse[value]:
inputdict[key] = newvalue
Ja jūs iterējat pa vārdnīcu, jūs iegūstat atslēgas, tāpēc, pieņemot, ka jūsu vārdnīca ir mainīgajā ar nosaukumu data
un jums ir kāda funkcija find_definition()
, kas iegūst definīciju, jūs varat darīt kaut ko līdzīgu šādam:
for word in data:
data[word] = find_definition(word)
Šeit ir funkcija, kas atradīs atslēgu un aizstās vērtību.
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)
Izvades rezultāts ir:
{'corse': 378, 'cielo': 209, 'mute': 16}
{'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16}
Ja konstatējat, ka cilpas izstrāde vārdnīcā aizņem pārāk daudz laika, izmēģiniet ģeneratora funkciju:
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)
Izvads:
{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}