69

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

我想处理所有条目,用我找到的实际定义替换值。有没有一种简单的方法来遍历具有数字值的关键字以替换(当我研究含义时)?

字典开始:

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

一种应用程序,它会建议一个关键字来研究和定义。

4

5 回答 5

87

您不能选择特定值(或值类型)。您要么创建一个反向索引(将数字映射回(列表)键),要么每次都必须遍历所有值。

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

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
于 2013-11-04T17:40:59.123 回答
86

通过 dict.update() 函数

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

要么像这样:

my_dict.update({'key1': 'value1', 'key2': 'value2'})

或像这样:

my_dict.update(key1='value1', key2='value2')

通过字典解包

Python 3.5 开始,您还可以为此使用字典解包

my_dict = { **my_dict, 'key1': 'value1', 'key2': 'value2'}

注意:这将创建一个新字典。

通过合并运算符或更新运算符

Python 3.9开始,您还可以在字典上使用合并运算符:

my_dict = my_dict | {'key1': 'value1', 'key2': 'value2'}

注意:这将创建一个新字典。

或者您可以使用更新运算符

my_dict |= {'key1': 'value1', 'key2': 'value2'}
于 2017-01-20T04:48:21.023 回答
9

如果您遍历字典,您将获得键,因此假设您的字典位于一个名为的变量中data并且您有一些find_definition()获取定义的函数,您可以执行以下操作:

for word in data:
    data[word] = find_definition(word)
于 2013-11-04T17:42:37.653 回答
1

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

想象一下,你有一本这样的字典:

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'}
于 2020-06-24T06:51:49.127 回答
-3
data = {key1: value1, key2: value2, key3: value3}

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

这会将 key1: value1 替换为 key1: change

于 2021-03-24T22:03:23.860 回答