我有一本字典,里面有20000多个词条,目前只有独特的词和该词在源文本(意大利文的但丁神曲)中的使用次数。
我想通过所有的词条,在我找到它们的时候,用实际的定义来替换这些值。有没有一种简单的方法来迭代那些有数字值的关键词以进行替换(当我研究其含义时)?
词典的开头。
{'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc.
算是一个应用程序,会建议研究和定义一个关键词。
你不能选择特定的值(或值的类型)。你要么做一个反向索引(将数字映射回(键的列表)),要么你必须每次都循环浏览所有的值。
如果你以任意的顺序处理数字,你也可以循环处理所有的项目。
for key, value in inputdict.items():
# do something with value
inputdict[key] = newvalue
否则,我将使用反向索引。
from collections import defaultdict
reverse = defaultdict(list)
for key, value in inputdict.items():
reverse[value].append(key)
现在你可以通过值来查找键了。
for key in reverse[value]:
inputdict[key] = newvalue
这里有一个函数,可以找到你的键并替换你的值。
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)
输出结果是。
{'corse': 378, 'cielo': 209, 'mute': 16}
{'corse': 'Definition of "corse"', 'cielo': 209, 'mute': 16}
如果你发现循环浏览你的字典需要太长的时间,请尝试使用生成器函数。
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)
输出。
{'corse': 'Definition of "corse" via generator', 'cielo': 209, 'mute': 16}