더북(TheBook)

튜플을 반환하는 key 함수의 한 가지 제약 사항은 모든 비교 기준의 정렬 순서가 같아야 한다는 점(모두 오름차순이거나 모두 내림차순)이다. sort 메서드에 reverse 파라미터를 넘기면 튜플에 들어 있는 두 기준의 정렬 순서가 똑같이 영향을 받는다(실행 결과에서 sanderdrill의 앞에 나오지 뒤에 나오지 않는다는 사실을 확인하라)..

power_tools.sort(key=lambda x: (x.weight, x.name),
                 reverse=True)  # 모든 비교 기준을 내림차순으로 만든다
print(power_tools)

>>>
[Tool('착암기', 40), Tool('원형 톱', 5), Tool('연마기', 4), Tool('드릴', 4)]

숫자 값의 경우 단항(unary) 부호 반전(-) 연산자를 사용해 정렬 방향을 혼합할 수 있다. 부호 반전 연산자는 반환되는 튜플에 들어가는 값 중 하나의 부호를 반대로 만들기 때문에, 결과적으로 나머지 값의 정렬 순서는 그대로 둔 채로 반전된 값의 정렬 순서를 반대로 만든다. 다음 코드는 이 방법을 사용해 전동 공구를 weight 기준 내림차순으로 정렬한 다음 name 기준 오름차순으로 정렬한다(sander가 이제는 drill의 앞이 아니라 뒤에 온다는 사실을 확인하라).

power_tools.sort(key=lambda x: (-x.weight, x.name))
print(power_tools)

>>>
[Tool('착암기', 40), Tool('원형 톱', 5), Tool('드릴', 4), Tool('연마기', 4)]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.