만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/기억노트

[python] sort 를 할 때 2개의 key 를 서로 다른 순서로 정렬하기 (2 key 2 order)

D36choi 2020. 8. 25. 23:46
728x90

문제정의

선거 후보자들의 득표수를 기록한 list 가 있다고 가정하자.

list에는 (득표수, 후보자번호) 형태의 tuple 이 요소로 저장된다.

 

EX) [(5,3),(5,2),(10,99),(10,1)]

 

위의 후보자 투표 합산 결과에서,

득표수가 많은 순서대로 출력하라. 만약, 득표수가 같은 후보가 있다면 빠른 번호를 가진 후보자를 먼저 출력하라

 

만약 단순 sort 로 정렬하게 된다면, tuple 의 첫번째 요소의 오름차순순으로 정렬되게 된다.

 

[(5, 2), (5, 3), (10, 1), (10, 99)]

 

구해야 하는건, 많은 득표를 받은 후보를 번호의 오름차순순으로 정렬해야 한다.

즉, key 1 -> 내림차순 && key 2 -> 오름차순

으로 정렬해야 한다!!

 

lambda 식을 이용해 2번의 정렬을 이어서 한다.

 

votes = [(5,3),(5,2),(10,99),(10,1)]


votes.sort(key= lambda x: x[1])
votes.sort(key= lambda x: x[0], reverse=True)

print(votes)

결과 : [(10, 1), (10, 99), (5, 2), (5, 3)]

 

원하는 결과가 나왔다. 여기서 주의 해야할 건, reverse 로 돌려야하는 key 를 나중에 돌려야 한다는 것이다.

위 두 sort 의 순서가 반대라면 (10,99) 가 (5,*) 인 2개 보다 나중에 출력된다.