1

複数の削除を取得するため、辞書の 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 ステートメントは 1 つのキーだけを削除します。しかし、ループすると、複数のキーが削除されます。コードを数回確認しましたが、問題ありません。この時点で、何が問題なのかわかりません...申し訳ありませんが、コード全体を表示していません。しかし、誰かが問題が何であるかを知っているかもしれません。ありがとうございました

4

1 に答える 1

2

実際のコードのどこかに参照を作成してdictsいるため、1 つの場所を変更すると、すべての参照が変更されます。

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}} 
于 2015-08-11T12:02:27.117 に答える