[Python] 파이썬 정렬 sorted 함수 정리 및 예제
[Python] 파이썬 정렬 sorted 함수 정리 및 예제
안녕하세요. BlockDMask입니다.
오늘은 데이터를 정렬해주는 sorted() 함수에 대해서 알아보려고 합니다.
혹시 리스트의 sort() 메서드를 보시려면 [리스트 sort() 메서드 보러가기]를 참고해주세요.
<목차>
1. sorted 함수 개요
sorted()는 파이썬 내장 함수로, 전달된 iterable 데이터를 정렬하여 새로운 리스트로 반환합니다.
sorted(iterable)
sorted(iterable, reverse=True)
sorted(iterable, key=함수)
sorted(iterable, key=함수, reverse=True)
iterable: 리스트, 튜플, 문자열, 딕셔너리 등 반복 가능한 객체
key: 각 요소를 정렬 기준으로 사용할 함수
reverse: True 설정 시 내림차순 (기본값 False는 오름차순)
차이점:
list.sort()는 원본 리스트를 직접 변경(in-place)하지만,
sorted()는 원본을 유지한 채 정렬된 새 리스트를 돌려줍니다.
2. 리스트 정렬 예제
# BlockDMask 리스트 예제
numbers = [2, 4, 1, 9, 100, 29, 40, 10]
asc_numbers = sorted(numbers) # 오름차순 새 리스트
desc_numbers = sorted(numbers, reverse=True) # 내림차순 새 리스트
print(f"BlockDMask 원본 리스트 : {numbers}") # 원본 유지 확인
print(f"BlockDMask sorted(numbers): {asc_numbers}")
print(f"BlockDMask sorted(...,rev): {desc_numbers}")
# 출력 결과 예시
# BlockDMask 원본 리스트 : [2, 4, 1, 9, 100, 29, 40, 10]
# BlockDMask sorted(numbers): [1, 2, 4, 9, 10, 29, 40, 100]
# BlockDMask sorted(...,rev): [100, 40, 29, 10, 9, 4, 2, 1]
설명:
sorted(numbers)는 리스트를 오름차순으로 정렬한 새 리스트를 반환합니다.
reverse=True를 설정하면 내림차순 정렬이 가능합니다.
3. 딕셔너리 key 정렬 예제
# BlockDMask 딕셔너리 key 정렬 예제
data_dict = {'a':66, 'i':20, 'e':30, 'd':33, 'f':50, 'g':60, 'c':22, 'h':80, 'b':11}
# 1) 기본 딕셔너리 출력
print(data_dict)
# 2) (key, value) 쌍 오름차순 정렬
items_asc = sorted(data_dict.items())
# 3) (key, value) 쌍 내림차순 정렬
items_desc = sorted(data_dict.items(), reverse=True)
# 4) 키만 오름차순 정렬
keys_asc = sorted(data_dict.keys())
# 5) shortcut: iterable(sorted(data_dict))
keys_shortcut = sorted(data_dict)
print("items_asc :", items_asc)
print("items_desc :", items_desc)
print("keys_asc :", keys_asc)
print("keys_shortcut:", keys_shortcut)
# 출력 결과 예시
# {'a': 66, 'i': 20, 'e': 30, 'd': 33, 'f': 50, 'g': 60, 'c': 22, 'h': 80, 'b': 11}
# items_asc : [('a', 66), ('b', 11), ('c', 22), ('d', 33), ('e', 30), ('f', 50), ('g', 60), ('h', 80), ('i', 20)]
# items_desc : [('i', 20), ('h', 80), ('g', 60), ('f', 50), ('e', 30), ('d', 33), ('c', 22), ('b', 11), ('a', 66)]
# keys_asc : ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
# keys_shortcut: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
설명:
sorted(data_dict.items())는 키 기준으로 (key,value) 튜플 리스트를, sorted(data_dict)는 키만 정렬된 리스트를 반환합니다.
4. 딕셔너리 value 정렬 예제 (operator 모듈)
import operator
value_dict = {'b':400, 'f':300, 'a':200, 'd':100, 'c':500}
# value 오름차순 정렬
value_asc = sorted(value_dict.items(), key=operator.itemgetter(1))
# value 내림차순 정렬
value_desc = sorted(value_dict.items(), key=operator.itemgetter(1), reverse=True)
print("value_asc :", value_asc)
print("value_desc:", value_desc)
# 출력 결과 예시
# value_asc : [('d', 100), ('a', 200), ('f', 300), ('b', 400), ('c', 500)]
# value_desc: [('c', 500), ('b', 400), ('f', 300), ('a', 200), ('d', 100)]
설명:
operator.itemgetter(1)는 튜플의 두 번째 값(value)을 추출해 정렬 기준으로 사용합니다. 간결하고 빠릅니다.
5. 딕셔너리 value 정렬 예제 (lambda 함수)
# BlockDMask lambda 예제
value_dict2 = {'blockdmask':400, 'equal':300, 'apple':200, 'dish':100, 'cook':500}
# value 오름차순 정렬
lambda_asc = sorted(value_dict2.items(), key=lambda x: x[1])
# value 내림차순 정렬
lambda_desc = sorted(value_dict2.items(), key=lambda x: x[1], reverse=True)
print("lambda_asc :", lambda_asc)
print("lambda_desc:", lambda_desc)
# 출력 결과 예시
# lambda_asc : [('dish', 100), ('apple', 200), ('equal', 300), ('blockdmask', 400), ('cook', 500)]
# lambda_desc: [('cook', 500), ('blockdmask', 400), ('equal', 300), ('apple', 200), ('dish', 100)]
설명:
lambda x: x[1]는 각 튜플에서 두 번째 요소(value)를 기준으로 정렬하는 짧은 익명 함수입니다.
정리:
이번 글에서는 sorted() 함수를 활용해 리스트와 딕셔너리를 다양한 방식으로 정렬하는 방법을 살펴보았습니다.
원본 데이터를 변경하지 않고 정렬 결과만 필요할 때 sorted()를 활용해 보세요!
감사합니다. – BlockDMask
댓글
댓글 쓰기