알고리즘 문제를 풀다보면 딕셔너리를 정렬해서 사용할 필요가 있는 경우가 있다.
이 때, 그냥 리스트를 정렬하듯이 사용하면 key를 기준으로 정렬을 하게 되는데,
경우에 따라서 value를 사용하여 정렬할 필요가 있는 경우도 있다.
결국 딕셔너리를 key가 아닌 value를 기준으로 정렬을 하기 위해서는 정렬 기준을 바꿔주는 과정이 필요하다.
이 때 사용할 수 있는 것이 내장 함수인 sorted이다.
[Python] 파이썬 리스트 오름차순, 내림차순 정렬 정리(sort, sorted, lambda)
sorted는 sorted(<리스트>,key=<함수>,revsere=<bool>)의 값을 인자로 받는데,
이 중 key 부분의 함수를 조정하여 원하는 정렬 기준을 입력할 수 있다.
우선 def로 함수를 만들어서 step-by-step으로 과정을 따라가보자.
d = {'a': 3, 'b': 1, 'c': 5, 'd': 2}
# 정렬 기준 함수 정의
def get_value(item):
return item[1]
# 정렬 함수 정의
def sort_it(lst):
return sorted(lst, key=get_value, reverse=True)
sorted_d = sort_it(d.items())
먼저 get_value 함수를 통해 딕셔너리에서 value만 추출할 수 있다.
본래 기능은 index=1인 값만 출력하는 것이지만, 딕셔너리에서는 [0]이 key, [1]이 value이기 때문에 자연스럽게 value만 추출하게 된다.
이렇게 만든 함수를 sorted()의 key 파라미터에 넣어주면, 정렬 기준이 value가 된다.
이제 (key, value) 형태로 되어 있는 d.items()를 sort_it함수에 넣어주면 의도한 대로 작동한다.
사실 나에겐 이쪽이 더 익숙한데,
딕셔너리 정렬을 검색하면 나오는 함수는 lambda를 사용하는 경우가 대부분이기 때문이다.
다만 어떤 원리로 해당 lambda 함수가 딕셔너리 value 정렬의 기능을 하는 지 알기 위해서 상술한 것처럼 def를 사용해 확인해보았다.
앞서 길게 작성한 함수를 lambda를 사용해 아래처럼 축약할 수 있다.
sorted(d.items(), key=lambda x: x[1], reverse=True)