Python字典替换值
我有一本字典,里面有20000多个词条,其中有唯一的单词以及该单词在源文本中的使用次数(但丁的意大利神曲) 我希望在找到所有条目时使用实际定义替换该值。有没有一种简单的方法来迭代那些值为数字的关键字,以便替换它们(当我研究其含义时) 词典开始: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. 这类应
{'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
感觉一团糟。