如何从 Python 2.7 中的 set() 中删除重复的类对象?

luc*_*egh 2 class object set duplicates python-2.7

让我们定义一个简单的类:

class sample(object):
def __init__(self, key):
    self.key = key
Run Code Online (Sandbox Code Playgroud)

假设 a1、a2、a3、a4、a5 是“sample”类的对象(a1 和 a5 共享相同的“key”元素):

a1 = sample('test1')
a2 = sample('test2')
a3 = sample('test3')
a4 = sample('test4')
a5 = sample('test1')
Run Code Online (Sandbox Code Playgroud)

现在,如果我将这些元素添加到列表中,结果将是:

 [<__main__.sample at 0x1189c1e90>,
 <__main__.sample at 0x1189c1b90>,
 <__main__.sample at 0x1189c15d0>,
 <__main__.sample at 0x1189c1dd0>,
 <__main__.sample at 0x1189c16d0>]
Run Code Online (Sandbox Code Playgroud)

但如果我将此列表转换为“集合”对象(以删除 a1/a5),结果将是:

 {<__main__.sample at 0x1189c15d0>,
 <__main__.sample at 0x1189c16d0>,
 <__main__.sample at 0x1189c1b90>,
 <__main__.sample at 0x1189c1dd0>,
 <__main__.sample at 0x1189c1e90>}
Run Code Online (Sandbox Code Playgroud)

所以,问题是:如何修改该类,以便它可以设置两个与同一对象共享相同“键”的对象(这样我在 set() 中就没有重复项)?我正在寻找一个非常简单的实现:)

Sim*_*ser 5

您必须实现自己的__hash____eq__方法,以确保在构造集合时将它们视为相等:

class Sample(object):
    def __init__(self, key):
        self.key = key

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

    def __eq__(self, other):
        return self.key == other.key
Run Code Online (Sandbox Code Playgroud)