【问题标题】:Python - set somehow getting duplicate dataPython - 设置以某种方式获取重复数据
【发布时间】:2011-11-04 18:47:05
【问题描述】:

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

set([1630, 1630])

任何指导将不胜感激。

【问题讨论】:

    标签: python iterator set


    【解决方案1】:

    如果一个类没有定义__cmp__() 或__eq__() 方法,它也不应该定义__hash__() 操作

    source

    定义__eq__()。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 2011-07-09
        • 1970-01-01
        • 2015-09-12
        • 2014-08-10
        相关资源
        最近更新 更多