본문 바로가기
Category/Python

Python sorted() 함수에서 정렬 기준 설정하기

by Corinee 2024. 11. 28.
728x90
반응형

Python의 sorted() 함수는 리스트, 튜플, 딕셔너리 등 반복 가능한(iterable) 데이터를 정렬할 때 사용됩니다. 기본적으로 오름차순으로 정렬되지만, key 매개변수를 사용하면 사용자 정의 기준에 따라 데이터를 정렬할 수 있습니다.

1. sorted() 함수의 기본 사용법

문법

sorted(iterable, key=None, reverse=False)
  • iterable: 정렬할 데이터 (리스트, 튜플, 딕셔너리 등).
  • key: 정렬 기준을 정의하는 함수. 각 요소를 기준으로 변환한 값에 따라 정렬.
  • reverse: 정렬 방향을 설정. 기본값은 False(오름차순), True로 설정하면 내림차순.

2. 기본 정렬

  • 데이터의 기본값(숫자 크기, 사전 순서 등)에 따라 정렬됩니다.
# 숫자 기본 정렬
numbers = [5, 2, 9, 1]
print(sorted(numbers))  # 출력: [1, 2, 5, 9]

# 문자열 기본 정렬 (사전 순)
words = ["apple", "banana", "cherry"]
print(sorted(words))  # 출력: ['apple', 'banana', 'cherry']

3. key를 사용한 사용자 정의 정렬

key는 각 요소를 특정 값으로 변환한 뒤 정렬 기준으로 사용합니다. key는 함수나 람다 함수로 정의할 수 있습니다.

예제 1: 문자열 길이로 정렬

words = ["apple", "banana", "kiwi", "cherry"]
print(sorted(words, key=len))  # 출력: ['kiwi', 'apple', 'cherry', 'banana']

예제 2: 튜플의 특정 요소로 정렬

튜플 데이터가 있을 때, 각 튜플의 두 번째 요소를 기준으로 정렬합니다.

data = [(1, 'apple'), (2, 'banana'), (3, 'cherry')]
print(sorted(data, key=lambda x: x[1]))
# 출력: [(1, 'apple'), (2, 'banana'), (3, 'cherry')]

예제 3: 숫자 내림차순 정렬

key와 reverse를 함께 사용하여 내림차순 정렬.

numbers = [5, 2, 9, 1]
print(sorted(numbers, reverse=True))  # 출력: [9, 5, 2, 1]

4. 복합 조건 정렬

여러 조건을 조합해 정렬할 때, key에서 튜플을 반환하도록 정의합니다.

예제: 판매량과 이름으로 정렬

  1. 판매량은 내림차순으로.
  2. 판매량이 같으면 이름은 오름차순으로.
books = [("book1", 10), ("book3", 5), ("book2", 10)]
sorted_books = sorted(books, key=lambda x: (-x[1], x[0]))
print(sorted_books)
# 출력: [('book1', 10), ('book2', 10), ('book3', 5)]

5. 딕셔너리 정렬

딕셔너리는 키나 값으로 정렬할 수 있습니다.

예제 1: 키로 정렬

data = {"b": 3, "a": 1, "c": 2}
print(sorted(data))  # 출력: ['a', 'b', 'c']

예제 2: 값으로 정렬

data = {"b": 3, "a": 1, "c": 2}
print(sorted(data.items(), key=lambda x: x[1]))
# 출력: [('a', 1), ('c', 2), ('b', 3)]

6. reverse 옵션

reverse=True를 추가하면 정렬 방향을 반대로 설정합니다.

예제: 내림차순 정렬

numbers = [5, 2, 9, 1]
print(sorted(numbers, reverse=True))  # 출력: [9, 5, 2, 1]

7. key에 사용자 정의 함수 사용

예제: 절대값으로 정렬

def absolute(x):
    return abs(x)

numbers = [-3, 5, -1, 4]
print(sorted(numbers, key=absolute))  # 출력: [-1, -3, 4, 5]

람다 함수를 사용한 동일 예제

numbers = [-3, 5, -1, 4]
print(sorted(numbers, key=lambda x: abs(x)))  # 출력: [-1, -3, 4, 5]

8. 실전 예제

문제: 문자열 리스트를 길이 내림차순으로 정렬하되, 길이가 같으면 사전 순으로 정렬

words = ["apple", "banana", "kiwi", "cherry", "pear"]
sorted_words = sorted(words, key=lambda x: (-len(x), x))
print(sorted_words)
# 출력: ['banana', 'cherry', 'apple', 'kiwi', 'pear']

9. 정리

  • sorted()는 기본적으로 오름차순으로 정렬됩니다.
  • key 매개변수는 요소를 변환한 값을 기준으로 정렬할 때 사용됩니다.
  • key는 일반 함수 또는 람다 함수를 사용하여 유연하게 정의할 수 있습니다.
  • 여러 조건을 조합하거나 reverse=True를 활용하여 복잡한 정렬도 쉽게 구현할 수 있습니다.