2014-10-09 31 views
0

我正在尋找一種方便的方法來刪除包含在兩個字典中的類對象的實例。當我從一個字典刪除對象實例時,我應該在第二個字典中自動刪除。這無論如何可能嗎?刪除包含在Python中的兩個字典中的類對象實例

class node(): 

    def __init__(self, vID): 
     self.vID = vID 

    def __hash__(self): 
     return hash(self.vID) 

    def __eq__(self, other): 
     return self.vID == other.vID 

class structure(): 

    def __init__(self): 
     self.point_index_a = {} 
     self.point_index_b = {} 

    def add_point(self,x,y): 

     x_object = node(x) 
     self.point_index_a[x_object] = None 
     self.point_index_b[x_object] = None 

    def a_iter(self): 

     for k,v in self.point_index_a.iteritems(): 
      print k,v  

    def b_iter(self): 

     for k,v in self.point_index_b.iteritems(): 
      print k,v 

mg = structure() 
mg.add_point(1, 8) 
mg.add_point(3, 4) 

# point index a 
for k,v in mg.point_index_a.iteritems(): 
    print k,v 
# point index b 
for k,v in mg.point_index_b.iteritems(): 
    print k,v 

to_del = mg.point_index_a.iterkeys().next() 
del to_del 

# point index a, object to_del still exists in both dicts 
for k,v in mg.point_index_a.iteritems(): 
    print k,v 
# point index b 
for k,v in mg.point_index_b.iteritems(): 
    print k,v 
+0

我建議做刪除structure'的'一個實例方法。 – jonrsharpe 2014-10-09 10:17:48

+0

嗨喬恩,謝謝你的回覆。我剛剛嘗試了你的建議,不幸的是它沒有奏效。你可以詳細說明甚至提供一個基於我的代碼的例子嗎? – 2014-10-09 10:25:29

回答

1

我將實現如下:

class structure(): 

    ... 

    def remove(self, point): 
     del self.point_index_a[point] 
     del self.point_index_b[point] 
+0

嗯,我現在得到它,只要它包含在一個字典中,我必須從兩個單獨刪除它們,只是從point_index_a刪除它不足以。我希望它也會從point_index_b中刪除。感謝您的回答! – 2014-10-09 10:36:07

+0

另一種選擇是對'point_index_a'和'_b'使用你自己的'dict'類,它實現了你想要的行爲'del',但這會更加複雜。 – jonrsharpe 2014-10-09 10:38:16

+0

好吧,對於像我這樣的初學者來說聽起來相當複雜,如果你覺得自己喜歡它並且有時間,可以隨意僞代碼給我一些提示;) – 2014-10-09 10:54:56

相關問題