Ho impostato di oggetti:Come rimuovere i duplicati nel set per gli oggetti?
class Test(object):
def __init__(self):
self.i = random.randint(1,10)
res = set()
for i in range(0,1000):
res.add(Test())
print len(res) = 1000
Come rimuovere i duplicati dal set di oggetti?
Grazie per le risposte, è un lavoro:
class Test(object):
def __init__(self, i):
self.i = i
# self.i = random.randint(1,10)
# self.j = random.randint(1,20)
def __keys(self):
t =()
for key in self.__dict__:
t = t + (self.__dict__[key],)
return t
def __eq__(self, other):
return isinstance(other, Test) and self.__keys() == other.__keys()
def __hash__(self):
return hash(self.__keys())
res = set()
res.add(Test(2))
...
res.add(Test(8))
risultato: [2,8,3,4,5,6,7]
ma come risparmiare ordine? Imposta non supporta l'ordine. Posso usare la lista invece impostare per esempio?
grazie, ma se ho qualche attrs? – Bdfy
Combinali per produrre un hash intero univoco (usa la funzione buitlin 'hash' su attributi non interi e'^'loro insieme, per esempio) e definisci l'uguaglianza in un modo che abbia senso per te. Cosa devono avere in comune questi due oggetti per considerarli duplicati? Esprimilo in '__eq__'. –
Il modo più semplice per definire l'uguaglianza e l'hash è trovare una tupla isomorfa all'oggetto e quindi delegare a tuple '__hash__' e' __eq__', usando 'collections.namedtuple' (se applicabile) o costruendo le tuple su richiesta: 'def __hash __ (self): return hash ((self.x, self.y, self.z))'. – delnan