Quindi esiste un modo semplice per calcolare l'intersezione di due insiemi tramite set.intersection(). Tuttavia, ho il seguente problema:.Intersezione personalizzata Python intersezione
class Person(Object):
def __init__(self, name, age):
self.name = name
self.age = age
l1 = [Person("Foo", 21), Person("Bar", 22)]
l2 = [Person("Foo", 21), Person("Bar", 24)]
union_list = list(set(l1).union(l2))
# [Person("Foo", 21), Person("Bar", 22), Person("Bar", 24)]
(Object
è una base di classe fornito dal mio ORM che implementa funzionalità di base __hash__
e __eq__
, che aggiunge, in sostanza ogni membro della classe per l'hash In altre parole, il __hash__
restituito sarà un hash di ogni elemento della classe)
a questo punto, vorrei eseguire un'operazione di impostazione di intersezione da solo .name
, da trovare, per esempio, Person('Bar', -1).intersection(union_list) #= [Person("Bar", -1), Person("Bar", 22), Person("Bar", 24)]
. (Il tipico .intersection()
a questo punto non mi avrebbe dato qualsiasi cosa, non posso ignorare __hash__
o __eq__
sulla classe Person
, poiché ciò sarebbe contrario l'unione serie originale (I credo)
Qual è il modo migliore per farlo questo in Python 2.x
EDIT:? si noti che la soluzione non hanno fare affidamento su un set
Tuttavia, ho bisogno di trovare i sindacati e poi le intersezioni, così ci si sente come questo è suscettibile di un set. (ma sono disposto ad accettare soluzioni che usano qualunque magia tu ritenga degna, purché risolva il mio problema!)
Non capisco il risultato desiderato. Potresti per favore * spiegare * che cosa dovrebbe contenere il risultato? –
Err crap, che dovrebbe essere .union, not .intersection. Ho aggiornato la domanda: fammi sapere se è più chiara? –
Sono ancora un po 'confuso dal momento che il codice di esempio non ha il risultato richiesto. –