如何在不修改实际dict列表的情况下在dict列表中添加新的密钥对?

2024-10-01 19:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dictcommandsInWord的列表。我试图通过在dicts中搜索命令名来过滤这个列表。它给出了命令所在的dictcommandinWordExists列表。下面是我的代码:

commandinWordExists = list(filter(lambda commandInWord: commandInWord['Name'] == command, commandsInWord))


if commandinWordExists:
   commandinWordExists[0]['Count'] = commandsInModule[command]  

这里的问题是,当我尝试在dict commandinWordExists列表中添加一个新的键/值对Count时,这个对也被添加到我的dict commandsInWord的实际列表中。我不希望它被添加到实际的列表中。 例如,如果dict的commandsInWord列表是:

[{'Ability':'Green'
'Name':'setzen'
'Status':'freigegeben'}]

如果在dict的这个列表中寻找'setzen',那么commandinWordExists值将是

[{'Ability':'Green'
    'Name':'setzen'
    'Status':'freigegeben'}]

现在,如果在dictcommandinWordExists列表中添加一个新的键/值对计数,那么它也会修改dictcommandsInWord的原始列表。现在,两个dict列表都将具有以下值:

[{'Ability':'Green'
    'Name':'setzen'
    'Count' : 27
    'Status':'freigegeben'}]

怎样才能使原来的dict列表不被修改呢?你知道吗


Tags: name命令列表statuscountgreendictability
2条回答

你肯定想read this

Python从不隐式地复制任何内容,因此筛选列表中的dict与“original”中的dict相同:

>>> original = [{"foo": "bar"}]
>>> filtered = [item for item in original]
>>> print(id(original[0]))
140326431879528
>>> print(id(filtered[0]))
140326431879528
>>> original[0] is filtered[0]
True
>>> 

如果我理解正确,你需要创建一个列表的副本。你知道吗

例如:

import copy
commandinWordExists = list(filter(lambda commandInWord: commandInWord['Name'] == command, copy.deepcopy(commandsInWord)))

相关问题 更多 >

    热门问题