2016-10-05 5 views
-1

중첩 목록은 다음과 같습니다.중첩 된 목록에서 동일한 두 번째 요소 찾기 - 재귀 함수

[['CELTIC AMBASSASDOR', 'Warrenpoint'],['HAV SNAPPER', 'Silloth'],['BONAY', 'Antwerp'],['NINA', 'Antwerp'],['FRI SKIEN', 'Warrenpoint']] 

계속된다. 나는

['CELTIC AMBASSASDOR', 'Warrenpoint'] 
['FRI SKIEN', 'Warrenpoint'] 

['BONAY', 'Antwerp'] 
['NINA', 'Antwerp'] 

목록이 너무 깁니다 (나는 .csv 파일에서 읽고 있어요) 내가하는 일을 정확하게 검색 할 확인할 수 없습니다 (예를 들어 같은 두 번째 요소가 목록을 찾을 수있는 방법 예 : 나는 csv 파일의 모든 텍스트를 모르기 때문에 앤트워프를 찾기 위해 '앤트워프'를 검색 할 수 없습니다.) 그래서 두 번째로 분리 된 모든 중첩 목록을 찾을 때까지 검색 할 재귀 함수가 필요하다고 생각했습니다. 항목. 누군가가 더 나은 해결책을 가지고 있다면 재귀 함수를 만드는 방법을 알아낼 수 없었습니다. 많은 감사를드립니다.

+0

두 번째 요소와 전체 하위 목록의 값의 키 사전을 만들기 만하면 관심있는 경기를 포함하는 결과를 만들 이것은 각 목록 구성원의 두 번째 요소를 기반으로 Collection 또는 groupby에 대한 작업처럼 보입니다. – Prune

답변

2

여기에서 재귀를 사용할 필요는 없습니다.

import collections 
l = [['CELTIC AMBASSASDOR', 'Warrenpoint'],['HAV SNAPPER', 'Silloth'],['BONAY', 'Antwerp'],['NINA', 'Antwerp'],['FRI SKIEN', 'Warrenpoint']] 
d = collections.defaultdict(list) 
for item in l: 
    d[item[1]].append(item) 

result = dict(item for item in d.items() if len(d[item[0]]) > 1) 

결과 :

>>> import pprint 
>>> pprint.pprint(result) 
{'Antwerp': [['BONAY', 'Antwerp'], ['NINA', 'Antwerp']], 
'Warrenpoint': [['CELTIC AMBASSASDOR', 'Warrenpoint'], 
       ['FRI SKIEN', 'Warrenpoint']]} 
+0

와우. 우리의 대답은 거의 똑같습니다. –

+0

@ juanpa.arrivillaga - 그 이상한 일. : P 나는 네가 거짓 긍정적 인 항목을 'Silloth': [[ 'HAV SNAPPER', 'Silloth']]'라고 생각합니다. – TigerhawkT3

+0

물론, 나는 필터를 거르지 않았다. 너의 것이 더 완벽 해. 나는 자른다. –

0
filter(lambda x:x[1] in set(filter(lambda x:zip(*l)[1].count(x)==2,zip(*l)[1])),l) 
+0

이 질문에 대답 할 수 있지만 왜 설명이 추가 된 경우 대답으로 더 유용 할 것입니다. – CDspace

관련 문제