2016-10-28 1 views
1

튜플의 튜플이 하나 있는데 두 번째 요소로 먼저 정렬 한 다음 맨 아래 레이어의 첫 번째와 세 번째로 정렬하고 반복적으로이를 수행하려고합니다. 중간 계층의 각 튜플. 사용하여, 내가 거기에 일부 길을 왔다중 레이어 튜플의 여러 레이어로 요소 정렬 - 파이썬

sampleToBeSorted = (
     ((‘A’, 31, ‘B’), (‘D’, 32, ‘B’)), 
     ((‘C’, 31, ‘A’), (‘B’, 24, ‘C’), (‘C’, 33, ‘B’)), 
     ((‘D’, 31, ‘A’), (‘D’, 32, ‘B’), (‘C’, 29, ‘B’), (‘D’, 216, ‘C’)), 
     ((‘D’, 31, ‘A’), (‘D’, 52, ‘B’)), 
     ((‘D’, 40, ‘B’), (‘A’, 32, ‘C’)), 
     ((‘D’, 52, ‘B’), (‘D’, 32, ‘B’)), 
     ) 

: 그것은 다음과 같습니다

sampleToBeSorted = (
     (('D', 52, 'B'), ('D', 32, 'B')), 
     (('D', 31, 'A'), ('D', 52, 'B')), 
     (('A', 31, 'B'), ('D', 32, 'B')), 
     (('C', 31, 'A'), ('B', 24, 'C'), ('C', 33, 'B')), 
     (('D', 31, 'A'), ('D', 32, 'B'), ('C', 29, 'B'), ('D', 216, 'C')), 
     (('D', 40, 'B'), ('A', 32, 'C')), 
     ) 

있도록 :

예를 들어, 나는 다음과 같은 목록을 정렬 할

sortedSample = sorted(sampleToBeSorted, key= lambda x:(x[0][1],x[0][0],x[0][2])) 

그러나 이것은 중간 계층의 첫 번째 튜플에만 정렬됩니다. 이 반복적으로 중간 계층의 튜플 모두를 위해이 작업을 얻으려면, 나는 이것이 내가 확실히 무엇을 올바른 방법으로 유효하지 않은 구문을 알아낼 수 없습니다되고 난 그냥

sortedSample = sorted(sampleToBeSorted, key= lambda x:(x[i][1],x[i][0],x[i][2]) for i in range(len(sampleToBeSorted[x])) 

같은 것을이를 수정할 수 있다고 생각 이것을 쓰는 것입니다. 어떤 아이디어? 이런 종류의 일이 전에 응답 되었다면 나는 사전에 사과하지만, 나는 내가 생각할 수있는 모든 것을 시도하고 찾았다.

+0

마지막 표현식이 닫는 괄호를 벗어났습니다 :

sortedSample = sorted(sampleToBeSorted, key= lambda x:[(i[1],i[0],i[2]) for i in x]) 

의 핵심은 단순히

결과 귀하의 기준에 따라 재 주문 튜플의 목록입니다. 그러나 이것이 유일한 문제는 아닙니다. –

답변

0

이 시도 :

[(('A', 31, 'B'), ('D', 32, 'B')), 
(('C', 31, 'A'), ('B', 24, 'C'), ('C', 33, 'B')), 
(('D', 31, 'A'), ('D', 32, 'B'), ('C', 29, 'B'), ('D', 216, 'C')),  
(('D', 31, 'A'), ('D', 52, 'B')), 
(('D', 40, 'B'), ('A', 32, 'C')), 
(('D', 52, 'B'), ('D', 32, 'B'))] 
+0

예! 그게 정확히 내가 쓰려고하는 것입니다. 도와 주셔서 감사합니다! 이 코드는 나를 죽이고 있었다. – Gingerbeardman

관련 문제