Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典替换值_Python_Python 3.x_Dictionary - Fatal编程技术网

Python字典替换值

Python字典替换值,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我有一本字典,里面有20000多个词条,其中有唯一的单词以及该单词在源文本中的使用次数(但丁的意大利神曲) 我希望在找到所有条目时使用实际定义替换该值。有没有一种简单的方法来迭代那些值为数字的关键字,以便替换它们(当我研究其含义时) 词典开始: {'corse': 378, 'cielo,': 209, 'mute;': 16, 'torre,': 11, 'corsa': 53, 'assessin': 21, 'corso': 417, 'Tolomea': 21} # etc. 这类应

我有一本字典,里面有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

如果您在字典上进行迭代,就会得到键,因此假设字典位于名为
data
的变量中,并且您有一个函数
find\u definition()
,可以执行以下操作:

for word in data:
    data[word] = find_definition(word)
通过dict.update()函数 如果需要声明性解决方案,可以使用更改dict中的值

要么像这样:

dic0 = {0:"CL1", 1:"CL2", 2:"CL3"}
my_dict.update({'key1':'value1','key2':'value2'))
或者像这样:

dic0 = {0:"CL1", 1:"CL2", 2:"CL3"}
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'}
注意:这将创建一个新词典

也可以使用“更新”操作符:


我想这可能会帮助你解决你的问题

假设你有一本这样的字典:

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'}

在Python 2中,这将把key1:value1替换为key1:change

,如果在大型字典上迭代,请使用
iteritems()
而不是
items()
,这样整个字典内容就不会加载到内存中。(这对Python3来说并不重要,因为
items()
基本上与Python2中的
iteritems()
相同。)@nofinator:在Python2中,使用
iteritems()
可以防止创建一个新的列表,其中len(dictionary)元组引用字典中的键值对(仅迭代时是一种浪费)。词典内容本身总是加载到内存中。这并不适用于这里,因为问题被标记为Python 3:-)@MartijnPieters我们是否可以使用相同的设置以某种方式检索旧值?就像
.update()
返回旧值一样,它会为我节省一个步骤,即保存旧值,然后在需要时进行替换that@VivekKalyanarangan:不确定你在问什么;这里的问题是为给定的值找到一个键,然后使用该键替换其他地方的内容。我想您是在问,您是否可以获取给定密钥的旧值,同时输入新值?没有,只要使用两条语句:
old=d.get(key)
以防丢失的键不是错误,或者使用
old=d[key]
否则,然后使用
d[key]=new
。我最终打包了一本新字典。这是可行的,但效率很低
dict
感觉一团糟。