2012-06-05 5 views
0

이미 질문을 받았지만 질문에 대한 응답이 내 코드에서 작동하지 않았습니다.Python : 알파벳 순으로 목록 목록 정렬/그룹화

목록의 첫 번째 목록 [2]을 기준으로 사전 순으로 나열한 다음 목록 [3]과 목록 [4] 순으로 정렬 된 항목을 정렬하려고합니다. 실제 데이터는 더 큰 더 각 목록의 항목하지만, 예를 들어 있습니다 : 나는 비슷한 질문에 대한 답변으로 가지고있는 몇 가지를 시도

list = [ 
['X_campestris_vesicatoria', 'Bacteria', 'Proteobacteria', 
    'Gammaproteobacteria', 'Xanthomonadales', 'Xanthomonadaceae', 'Xanthomonas'], 
['Pantoea', 'Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 
    'Enterobacteriales', 'Enterobacteriaceae', 'Pantoea'], 
['Acidobacterium', 'Bacteria', 'Acidobacteria', 'Acidobacteriales', 
    'Acidobacteriaceae', 'Granulicella'], 
['S_boydii', 'Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 
    'Enterobacteriales', 'Enterobacteriaceae', 'Shigella']] 

:

taxlist.sort(key = lambda row: (row[2],row[3],row[4],row[5])) 
print taxlist 

을하지만 정렬이 발생하지 않습니다. 내가 할 때와 같은

:

sorted(taxlist, key=lambda x: (x[2],x[3],x[4],x[5])) 
print taxlist 

그리고 목록은 아직도 이것을 사용할 수 있습니다 분류되지 않거나 목록이 더 이상 반복 가능한되면

?

import csv 
writer = csv.writer(sys.stdout, delimiter="\t") 
writer.writerows(taxlist) 

도움 주셔서 감사합니다.

+1

당신의 예가 저에게 잘 맞고 정렬되어 있습니다. – badzil

+0

당신은 또한 단지 : key = lambda x : x [2 :]'를 당신의 정렬 키로 사용할 수 있습니다. – mgilson

답변

0

sorted은 새로운 목록을 제공하고 L.sortL을 적절하게 정렬합니다. 두 경우 모두 원래 목록에 계속 액세스 할 수 있으며 반복 할 수 있습니다.

심지어 sorted을 사용하는 경우에도 이전 목록에 계속 액세스 할 수 있으므로 반복 할 수 있습니다. 반환 된 목록에도 액세스 할 수 있으며 반복 할 수 있습니다.

도움이 되길 바랍니다.