십대를 위한 코딩/십대를 위한 파이썬

사용자 정의 함수를 활용한 고급 key 정렬

forSilver 2025. 5. 11. 05:52
반응형

 

사용자 정의 함수를 활용한 고급 key 정렬

파이썬에서 딕셔너리는 기본적으로 순서를 보장하지 않는 자료형이었지만,
Python 3.7 이후로는 입력 순서가 유지되는 구조로 바뀌었습니다.
하지만 우리가 원하는 기준대로 정렬하려면 여전히 sorted() 함수와 key 옵션을 활용해야 합니다.

이번 글에서는 딕셔너리를 키 기준이 아닌 값(value) 기준으로 정렬하는 방법,
그리고 lambda 함수를 활용한 다양한 정렬 응용 예제를 소개합니다.


1. 기본적인 딕셔너리 키 정렬

우선 아래와 같은 딕셔너리를 만들어 봅니다.

d = {'one': 1, 'tow': 2, 'three': 3, 'four': 4}

키 기준으로 정렬하기

for key in sorted(d):
    print(f'{key} => {d[key]}')

출력 결과는 키 문자열의 알파벳 순서로 나옵니다:

four => 4
one => 1
three => 3
tow => 2

2. 값 기준으로 정렬하기 (key=lambda 사용)

딕셔너리를 값 기준으로 정렬하려면 sorted() 함수의 key 인자를 사용해야 합니다.

for key in sorted(d, key=lambda k: d[k]):
    print(f'{key} => {d[key]}')

출력 결과는 값의 오름차순입니다:

one => 1
tow => 2
three => 3
four => 4

설명:

  • sorted(d)는 딕셔너리의 리스트를 반환합니다.
  • lambda k: d[k]는 키에 해당하는 값을 기준으로 정렬하게 만듭니다.

3. .items()로 정렬된 튜플 리스트 얻기

dict.items()를 이용하면 (key, value) 쌍의 리스트를 다룰 수 있습니다.
이를 그대로 정렬하면 튜플의 두 번째 값(즉, value)을 기준으로 정렬할 수 있습니다.

sorted_items = sorted(d.items(), key=lambda item: item[1])
print(sorted_items)

출력 결과:

[('one', 1), ('tow', 2), ('three', 3), ('four', 4)]

정렬된 결과를 다시 딕셔너리로 변환하려면 dict() 함수를 사용합니다.

sorted_dict = dict(sorted(d.items(), key=lambda item: item[1]))
print(sorted_dict)

출력 결과:

{'one': 1, 'tow': 2, 'three': 3, 'four': 4}

4. 내림차순 정렬 (reverse=True)

값 기준으로 내림차순 정렬하고 싶다면 reverse=True를 함께 사용하세요.

for key in sorted(d, key=lambda k: d[k], reverse=True):
    print(f'{key} => {d[key]}')

또는 .items() 방식으로:

sorted_items = sorted(d.items(), key=lambda item: item[1], reverse=True)
print(sorted_items)

출력 결과:

[('four', 4), ('three', 3), ('tow', 2), ('one', 1)]

5. 정리

목적  코드 예시
키 기준 정렬 sorted(d)
값 기준 정렬 sorted(d, key=lambda k: d[k])
값 기준 내림차순 sorted(d, key=lambda k: d[k], reverse=True)
(key, value) 튜플 sorted(d.items(), key=lambda item: item[1])
정렬 후 딕셔너리화 dict(sorted(d.items(), key=lambda item: item[1]))

마무리

딕셔너리는 키 기반으로 데이터를 다루지만, 값 기준으로 정렬해야 할 상황은 매우 많습니다.
이럴 때 lambda와 sorted() 함수의 key 옵션을 함께 사용하면 매우 유연하고 강력한 정렬이 가능합니다.

여기까지 익히셨다면, 다음 단계는 사용자 정의 함수(def)를 이용한 정렬 기준 지정입니다.
예를 들어 점수에 따라 등급을 매기는 정렬, 날짜 기반 정렬 등을 함수로 만들어서 key로 넘기는 방식입니다.