因此,有一种简单的方法可以通过 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
课堂上,因为这会覆盖原来的集合并集(我认为)
在 Python 2.x 中执行此操作的最佳方法是什么?
编辑:请注意,解决方案不必依赖set
. 但是,我需要找到联合,然后是交叉点,所以感觉这适合一组(但我愿意接受使用你认为值得的任何魔法的解决方案,只要它解决了我的问题!)