2014-10-09 3 views
0

Я ищу удобный способ удалить экземпляр объекта класса, который содержится в двух словарях. Когда я удаляю экземпляр объекта из одного dict, я должен автоматически быть удален во втором dict. Это так или иначе возможно?Удаление экземпляра объекта класса, содержащегося в двух Dicts в 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

+0

Привет, Джон, спасибо за ваш ответ. Я просто попробовал ваше предложение, к сожалению, это не сработало. Не могли бы вы разработать или даже представить пример, основанный на моем коде? –

ответ

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. Спасибо за Ваш ответ! –

+0

Другой вариант - использовать свой собственный 'dict'-подобный класс для' point_index_a' и '_b', который реализует' del' с поведением, который вы хотите, но это было бы намного сложнее. – jonrsharpe

+0

А, ок, звучит довольно изощренно для новичка, подобного мне, не стесняйтесь псевдо-кода некоторым подсказкам для меня, если вам это нравится, и у вас есть время;) –

Смежные вопросы