2017-10-22 7 views
1

첫 번째 요소의 다른 튜플과 일치하는 튜플에서 새 튜플 목록을 만들고 싶습니다. 튜플이 첫 번째 요소의 다른 튜플과 일치 할 때 세 번째 요소를 일치하는 튜플에 추가하려고합니다. 데이터 (튜플 3 문자열을 가지고)의일치하는 튜플 요소를 다른 튜플의 고유 요소와 결합

예 :

unique_3 = [(apple, banana, fruit), 
      (apple, banana, dessert), 
      (eggplant, fig, plant), 
      (eggplant, fig, purple), 
      (iris, jaguar, horse)] 

내가 찾고 있어요 출력 :

난 단지 정말 튜플의 첫 번째 요소에 일치 할 필요
new_list =[(apple, banana, [fruit, dessert]), 
      (eggplant, fig, [plant, purple]), 
      (iris, jaguar, horse)] 

. 그래서 이것을 시도했습니다 :

new_list= [next(i for i, v in enumerate(unique_3) if v[0] == any(v[0]))] 

결과없이 StopIteration을 반환하므로 new_list를 작성하는 데별로 익숙하지 않았습니다.

답변

1

당신은 그룹에 groupby 각 튜플의 첫 번째 요소에 따라 항목, 각 for 반복에서

from itertools import groupby 

unique_sorted = sorted(unique_3, key = lambda x: x[0]) 

group_list = [] 
for key, group in groupby(unique_sorted, lambda x: x[0]): 
     group_list.append(list(group)) 

new_list = [(x[0][0], x[0][1], [y[-1] for y in x]) for x in group_list] 

, 같은 첫 번째 튜플 요소, key을 가진 요소 groupgroupby 반환 그룹을 사용할 수 있습니다. 요소는 그룹이되기 위해 연속적이어야하므로 원래 목록은 각 튜플의 첫 번째 값을 기반으로 첫 번째 단계에서 정렬됩니다.