Итак, существует простой способ вычислить пересечение двух множеств с помощью set.intersection(). Однако у меня есть следующая проблема:
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
— это базовый класс, предоставленный моей ORM, который реализует базовые функции __hash__
и __eq__
, которые, по сути, добавляют каждый член класс в хэш. Другими словами, возвращаемый __hash__
будет хэшем каждого элемента класса)
На этом этапе я хотел бы запустить операцию пересечения множества с помощью .name
, чтобы найти, скажем, Person('Bar', -1).intersection(union_list) #= [Person("Bar", -1), Person("Bar", 22) , Person("Bar", 24)]
. (типичный .intersection()
на данный момент мне ничего не даст, я не могу переопределить __hash__
или __eq__
в классе Person
, так как это переопределит исходное объединение множеств (I thin k)
Как лучше всего это сделать в Python 2.x?
РЕДАКТИРОВАТЬ: Обратите внимание, что решение не имеет, чтобы полагаться на набор
. Однако мне нужно найти союзы, а затем пересечения, поэтому кажется, что это поддается набору (но я готов принять решения, использующие любую магию, которую вы считаете достойной, если это решает мою проблему!)