각각 3 개의 속성이있는 객체 목록이 있는데, 내 객체 중 겹치는 속성이 있는지 찾아 내서 겹치는 속성이있는 객체 세트로 가져 오려고합니다.반복되는 속성에서의 파이썬 일치
나를 명확히하자
class Obj():
'''My example objects! they have 3 attributes.'''
def __init__(a, b, c):
self.a = a
self.b = b
self.c = c
>>>> obj1 = Obj(a= 1, b = 2, c = 3)
>>>> obj2 = Obj(a= 1, b = 5, c = 6)
>>>> obj3 = Obj(a= 10, b = 12, c = 3)
>>>> obj4 = Obj(a= 0, b = 0, c = 0)
>>>> obj5 = Obj(a= 100, b = 5, c = 5)
>>>> obj6 = Obj(a = -10, b = 0, c = 56)
>>>> obj7 = Obj(a = None, b = None, c = None)
# obj2 matches obj1 on attribute: "a"
# obj3 matches obj1 on attribute: "c"
# obj5 matches obj2 on attribute: "b"
# obj6 matches obj4 on attribute: "b"
# obj7 matches no one
따라서 내 출력해야한다 : 나는 파이썬이 할 수있는 방법이
[[obj1, obj2, obj3, obj5], [obj4, obj6], [obj7]]
있습니까? 또한 이와 같은 것을 검색 할 수있는 핵심어가 도움이 될 것입니다. 나는 아래의 해결책을 시도했다. 그것은 ... 해커 것 같습니다.
편집 : 제 예제와 일치하도록 숫자를 변경해야했습니다. 오타를 유감스럽게 생각합니다!
편집 : 솔루션에서 나의 현재 시도 :
adict = defaultdict(list)
for obj in list_objects:
adict[obj.a].append(obj)
adict[obj.b].append(obj)
adict[obj.c].append(obj)
그런 다음 이상 2 이상의 목록에 대한() adict.values 검색 다음 (어떻게 든) 목록을 결합합니다.
나는 우아한 솔루션을 원하고 있습니까?
그래서 "일치"가 전이되기를 원합니다. obj2가 obj1과 일치하고 obj3이 obj2와 일치하면 obj3은 속성을 공유하지 않더라도 obj1과 일치합니까? – abarnert
[Union Find] (http://en.wikipedia.org/wiki/Union_find)와 같은 소리 –
'obj4'와 'obj5'가 'a'값과 일치한다는 사실을 어떻게 처리하고 싶습니까? –