Пересечение пользовательских наборов Python

Итак, существует простой способ вычислить пересечение двух множеств с помощью 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?

РЕДАКТИРОВАТЬ: Обратите внимание, что решение не имеет, чтобы полагаться на набор. Однако мне нужно найти союзы, а затем пересечения, поэтому кажется, что это поддается набору (но я готов принять решения, использующие любую магию, которую вы считаете достойной, если это решает мою проблему!)

5
задан Ben Stott 30 May 2012 в 10:16
поделиться