Por lo tanto, existe una manera fácil de calcular la intersección de dos conjuntos a través de set.intersection(). Sin embargo, tengo el siguiente problema:.Intersección del conjunto personalizado de Python
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
es una clase base proporcionado por mi ORM que implementa básica __hash__
y __eq__
funcionalidad, que esencialmente se suma a todos los miembros de la clase a la picadillo En otras palabras, la __hash__
devuelta será un hash de cada elemento de la clase)
en esta etapa, me gustaría realizar una operación de intersección de conjuntos sólo .name
, para encontrar, por ejemplo, Person('Bar', -1).intersection(union_list) #= [Person("Bar", -1), Person("Bar", 22), Person("Bar", 24)]
. (La típica .intersection()
en este punto no me daría nada, no puedo anular __hash__
o __eq__
en la clase Person
, ya que esto anularía la unión conjunto original (I que)
¿Cuál es la mejor manera de hacerlo esto en Python 2.x
EDIT:? Tenga en cuenta que la solución no tienen que depender de un set
sin embargo, tengo que encontrar uniones y luego intersecciones, lo que parece que esta es susceptible de un conjunto. (¡Pero estoy dispuesto a aceptar soluciones que utilicen la magia que consideren digna, siempre que resuelva mi problema!)
No entiendo el resultado deseado. ¿Podrías * explicar * qué debería contener el resultado? –
Err mierda, que debe ser .union, not .intersection. He actualizado la pregunta. ¿Me permite saber si esto es más claro? –
Todavía estoy un poco confundido ya que el código de ejemplo no tiene el resultado que usted reclama. –