Vì vậy, có một cách dễ dàng để tính giao điểm của hai tập hợp thông qua set.intersection(). Tuy nhiên, tôi có vấn đề sau đây:.Giao diện tập hợp tùy chỉnh 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
là một cơ sở đẳng cấp được cung cấp bởi ORM của tôi mà thực hiện cơ bản __hash__
và __eq__
chức năng, trong đó chủ yếu cho biết thêm mỗi thành viên của lớp để băm Nói cách khác, số __hash__
được trả lại sẽ là băm của mọi thành phần của lớp)
Ở giai đoạn này, tôi chỉ muốn chạy một giao lộ được thiết lập theo số .name
, để tìm, giả sử, Person('Bar', -1).intersection(union_list) #= [Person("Bar", -1), Person("Bar", 22), Person("Bar", 24)]
. (Điển hình .intersection()
vào thời điểm này sẽ không cho tôi bất cứ điều gì, tôi không thể ghi đè __hash__
hoặc __eq__
trên lớp Person
, vì điều này sẽ ghi đè lên tập đoàn gốc (I nghĩ)
là gì cách tốt nhất để làm này bằng Python 2.x
EDIT: Lưu ý rằng các giải pháp không có phải dựa vào một set
Tuy nhiên, tôi cần phải tìm các đoàn thể và sau đó nút giao thông, vì vậy nó cảm thấy như thế này là tuân theo một quy định. (nhưng tôi sẵn sàng chấp nhận các giải pháp sử dụng bất kỳ ma thuật nào bạn cho là xứng đáng, miễn là giải quyết được vấn đề của tôi!)
Tôi không hiểu kết quả mong muốn của bạn. Bạn có thể vui lòng * giải thích * kết quả nên chứa? –
Err crap, đó phải là .union, not .intectionection. Tôi đã cập nhật câu hỏi - hãy cho tôi biết nếu điều này rõ ràng hơn? –
Tôi vẫn còn một chút bối rối vì mã ví dụ không có kết quả mà bạn yêu cầu. –