Python字典替换值

时间:2013-11-04 17:37:59

标签: python python-3.x dictionary

我有一本包含20 000多个条目的字典,目前只有单词和源文本中使用该单词的次数(Dante的意大利神曲)。

我想通过所有条目来处理所有条目,并将其替换为实际定义。是否有一种简单的方法来迭代关键字,这些关键字具有值作为数字以便替换(当我研究其含义时)?

字典开始:

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

将建议用于研究和定义关键字的应用程序的排序。

6 个答案:

答案 0 :(得分:50)

您无法选择特定值(或值的类型)。您要么制作反向索引(将数字映射回(键)键),要么每次都必须遍历所有值。

如果您正在以任意顺序处理数字,您也可以遍历所有项目:

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

答案 1 :(得分:23)

如果您需要声明性解决方案,可以使用dict.update()更改字典中的值。

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

答案 2 :(得分:5)

如果你遍历字典就得到了密钥,所以假设你的字典在一个名为data的变量中,并且你有一些函数find_definition()来获取定义,你可以做类似下面的事情:

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

答案 3 :(得分:0)

我认为这可以帮助您解决问题。

假设您有一个这样的字典:

dic0 = {0:"CL1", 1:"CL2", 2:"CL3"}

您要通过此值更改值:

dic0to1 = {"CL1":"Unknown1", "CL2":"Unknown2", "CL3":"Unknown3"}

您可以使用下面的代码来更改dic0正确遵守的dic0t01的值,而不必担心字典中的索引:

for x, y in dic0.items():
    dic0[x] = dic0to1[y]

现在您拥有:

>>> dic0
{0: 'Unknown1', 1: 'Unknown2', 2: 'Unknown3'}

答案 4 :(得分:-2)

data = {key1: value1, key2: value2, key3: value3}

for key in data:
   if key == key1:
       data[key1] = change
       print(data)

这将替换 key1: value1 到 key1: change

答案 5 :(得分:-52)

这是一个可以找到你的钥匙并替换你的价值的功能。

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}