Python - установить как-то получение дубликатов данных - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть определение класса с функцией __hash__, которая использует свойства объекта для создания уникального ключа для сравнения в наборах Python.

Хеш-метод выглядит следующим образом:

def __hash__(self):
return int('%d%s'%(self.id,self.create_key))

В модуле, отвечающем за реализацию этого класса, выполняется несколько запросов, которые могут создать дублирующие экземпляры этого класса, и очередь, созданная в функции, ответственной за это, представляется как набор, чтобы убедиться, что дубликаты могут быть опущены:

in_set = set()
  out_set = set()
  for inid in inids:
    ps = Perceptron.getwherelinked(inid,self.in_ents)

for p in ps:
  in_set.add(p)


  for poolid in poolids:
  ps = Perceptron.getwherelinked(poolid,self.out_ents)
  for p in ps:
    out_set.add(p)
  return in_set.union(out_set)

(Не уверен, почему отступы здесь искажены)

Каким-то образом, несмотря на вызов метода union, я все еще получаю два дублированных экземпляра. При распечатке (с помощью метода str в классе Perceptron, который просто вызывает hash ), эти два хэша идентичны, что теоретически не должно быть возможным.

set([1630, 1630])

Любое руководство будет оценено.

Ответы [ 2 ]

4 голосов
/ 04 ноября 2011

Если класс не определяет метод __cmp__() или __eq__(), он не должен определять операцию __hash__() либо

источник

Определить __eq__().

1 голос
/ 04 ноября 2011

Вам также необходимо реализовать __eq__() в соответствии с вашей __hash__() реализацией.

...