python "del" 语句删除多个字典
python "del" statment deletes multiple dicts
我对 dicts 的 del 语句有疑问,因为我得到了多次删除。因此,例如我的代码如下所示:
info_dict = {'parent1':{'exon':{'exon1':{'str_0':1, 'end_0':1}, 'exon2':{'str_0':2, 'end_0':2}}},'parent2':{'exon':{'exon1':{'str_0':1, 'end_0':1}, 'exon3':{'str_0':3, 'end_0':3}}}}
print info_dict
#now i want to delete this key:
del info_dict.get('parent1').get('exon').get('exon1')['end_0']
#as an result i get this:
print info_dict
{'parent1':{'exon':{'exon1':{'str_0':1}, 'exon2':{'str_0':2, 'end_0':2}}},'parent2':{'exon':{'exon1':{'str_0':1}, 'exon3':{'str_0':3, 'end_0':3}}}}
如您所见,del 语句从 'parent1' 中删除了正确的键。但它也会从 dict 'parent2' 中删除相同的键。
在我的代码中,我循环遍历字典:
for parent_key in info_dict:
"check something and del"
如果我 运行 像上面的代码一样,del 语句只删除一个键。但是当我循环它时,它删除了多个键。我检查了我的代码几次,没问题。在这一点上,我不知道出了什么问题……抱歉,我没有向您展示整个代码,它似乎很大。但也许有人知道问题出在哪里。
谢谢
在您的实际代码中的某处,您正在创建 对 dicts
的引用,因此当您更改一个地方时,您会更改所有引用。
d = {1:{2:3}}
d1 = d # creates a reference so d1 id d
print(d)
print(d1)
del d[1]
print(d)
print(d1)
输出:
{1: {2: 3}}
{1: {2: 3}}
{} # both empty as both are the same dict/object
{}
现在用 copy.deepcopy 进行实际复制:
from copy import deepcopy
d = {1:{2:3}}
d1 = deepcopy(d) # creates a copy/new object
print(d)
print(d1)
del d[1]
print(d)
print(d1)
输出:
{1: {2: 3}}
{1: {2: 3}}
{} # only d is empty as we created a new object for d1
{1: {2: 3}}
我对 dicts 的 del 语句有疑问,因为我得到了多次删除。因此,例如我的代码如下所示:
info_dict = {'parent1':{'exon':{'exon1':{'str_0':1, 'end_0':1}, 'exon2':{'str_0':2, 'end_0':2}}},'parent2':{'exon':{'exon1':{'str_0':1, 'end_0':1}, 'exon3':{'str_0':3, 'end_0':3}}}}
print info_dict
#now i want to delete this key:
del info_dict.get('parent1').get('exon').get('exon1')['end_0']
#as an result i get this:
print info_dict
{'parent1':{'exon':{'exon1':{'str_0':1}, 'exon2':{'str_0':2, 'end_0':2}}},'parent2':{'exon':{'exon1':{'str_0':1}, 'exon3':{'str_0':3, 'end_0':3}}}}
如您所见,del 语句从 'parent1' 中删除了正确的键。但它也会从 dict 'parent2' 中删除相同的键。
在我的代码中,我循环遍历字典:
for parent_key in info_dict:
"check something and del"
如果我 运行 像上面的代码一样,del 语句只删除一个键。但是当我循环它时,它删除了多个键。我检查了我的代码几次,没问题。在这一点上,我不知道出了什么问题……抱歉,我没有向您展示整个代码,它似乎很大。但也许有人知道问题出在哪里。 谢谢
在您的实际代码中的某处,您正在创建 对 dicts
的引用,因此当您更改一个地方时,您会更改所有引用。
d = {1:{2:3}}
d1 = d # creates a reference so d1 id d
print(d)
print(d1)
del d[1]
print(d)
print(d1)
输出:
{1: {2: 3}}
{1: {2: 3}}
{} # both empty as both are the same dict/object
{}
现在用 copy.deepcopy 进行实际复制:
from copy import deepcopy
d = {1:{2:3}}
d1 = deepcopy(d) # creates a copy/new object
print(d)
print(d1)
del d[1]
print(d)
print(d1)
输出:
{1: {2: 3}}
{1: {2: 3}}
{} # only d is empty as we created a new object for d1
{1: {2: 3}}