Python - 以某种方式设置获取重复数据

时间:2011-11-04 18:47:06

标签: python iterator set

我有一个带有__hash__函数的类定义,该函数使用对象属性创建一个唯一键,以便在python集中进行比较。

哈希方法如下所示:

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

在负责实现此类的模块中,运行了几个可以构造此类的重复实例的查询,并且在负责执行此操作的函数中创建的队列表示为一个集合以确保dupes可以省略:

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方法,我仍然得到两个重复的实例。打印出来时(在Perceptron类中使用 str 方法只调用 hash ),两个哈希值相同,理论上应该不可能。

set([1630, 1630])

任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:4)

  

如果某个类未定义__cmp__()__eq__()方法,则不应定义__hash__()操作

source

定义__eq__()

答案 1 :(得分:1)

您还需要实施__eq__()以匹配您的__hash__()实施。