2014-11-22 4 views
2

여러 항목으로 목록을 만들었습니다. 예를 들어파이썬의 여러 항목을 값순으로 정렬 한 목록

:

highScoreList = [["Dummy1",40,50],["Dummy2",100,80],["Dummy3",100,90]] 

나는 값에 따라이를 정렬하는 것을 시도하고있다. 우선 가장 큰 두 번째 값 (여기서 100은 40보다 큰 값)으로 정렬해야합니다.

동일한 두 번째 요소 (여기에는 100 및 100)가있는 요소가있는 경우에도 세 번째 요소를 사용하여 정렬하려고합니다. 세 번째 요소가 작을수록 순위가 높아집니다 (여기서 80은 90보다 작습니다).

결과는 같아야합니다

Dummy2 100 
Dummy3 100 
Dummy1 40 

나는 단지 1 점수 값을 사용하여 세트의 과거에 몇 가지 유사한 코드를 썼다.

def printHighScoreList(): 
    descender = ((key,highScoreList[key]) for key in sorted(highScoreList,key=highScoreList.get, reverse=True)) 
    for key, value in descender: 
     print(key, value) 
+1

집합이 아닙니다. 목록 목록입니다. 집합은 중괄호로 표시됩니다 :'{1, 2, 3}'. – iCodez

+0

@iCodez 당신은 완전합니다. 혼란스러워서 미안해. 내 질문이 업데이트되었습니다. 감사! –

답변

1

복합 키를 사용하여 정렬을 수행하십시오.

highScoreList.sort(key=lambda x: (-x[1], x[2])) 

highScoreList

이 올바르게 정렬 : 첫 번째 인덱스에 따라 역으로 정렬 할 목록의 목록을 원하기 때문에 그대로 2 번째의 인덱스를 사용하는 동안, 첫 번째 인덱스에 대한 키를 반전

[['Dummy2', 100, 80], ['Dummy3', 100, 90], ['Dummy1', 40, 50]] 

@ BHATIRSHAD의 대답에서 이중 정렬 방법은 3.39us (내 컴퓨터의 목록에서 10k 루프에 대해) 소요되지만 위의 방법은 단 1.5us 걸립니다.

2

세 번째 요소에서 오름차순으로 목록을 정렬 한 다음 결과 목록을 목록의 두 번째 요소를 기준으로 오름차순으로 정렬합니다. 데모 :

>>> highScoreList = [["Dummy1",40,50],["Dummy2",100,80],["Dummy3",100,90]] 
>>> sorted(sorted(highScoreList, key=lambda x:x[2]),key=lambda x:x[1],reverse=True) 
[['Dummy2', 100, 80], ['Dummy3', 100, 90], ['Dummy1', 40, 50]] 
관련 문제