So gibt es eine einfache Möglichkeit, den Schnittpunkt von zwei Mengen über set.intersection() zu berechnen. Aber ich habe folgendes Problem:.Python benutzerdefinierte Schnittmenge
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
ist eine Basis-Klasse durch meine ORM zur Verfügung gestellt, die grundlegende __hash__
und __eq__
Funktionalität implementiert, die im wesentlichen jedes Mitglied der Klasse der Hash fügt Mit anderen Worten, die __hash__
wird ein Hash von jedem Element der Klasse zurückgegeben)
In diesem Stadium würde Ich mag einen Satz Schnittoperation durch .name
laufen nur, zu finden, sagen wir, Person('Bar', -1).intersection(union_list) #= [Person("Bar", -1), Person("Bar", 22), Person("Bar", 24)]
. (Die typischen .intersection()
an dieser Stelle würde mir nicht alles geben, ich nicht __hash__
oder __eq__
auf der Person
Klasse außer Kraft setzen kann, da dies die ursprünglichen Vereinigungs außer Kraft setzen würde (I denken)
was der besten Weg ist zu tun in Python 2.x dies
EDIT: Beachten sie, dass die Lösung nicht auf einem set
zu verlassen hat ich brauche aber die Gewerkschaften zu finden und dann Kreuzungen, so es so fühlt, ist offen für einen Satz. (Aber ich bin bereit, Lösungen zu akzeptieren, die jede Magie benutzen, die Sie für angemessen halten, solange sie mein Problem löst!)
Ich verstehe Ihr gewünschtes Ergebnis nicht. Könnten Sie bitte * erklären * was das Ergebnis enthalten soll? –
Err mist, das sollte .union sein, nicht .intersection. Ich habe die Frage aktualisiert - lassen Sie mich wissen, ob dies klarer ist? –
Ich bin immer noch ein wenig verwirrt, da der Beispielcode nicht das gewünschte Ergebnis hat. –