[Python] 파이썬 정렬 sorted 함수 정리 및 예제

[Python] 파이썬 정렬 sorted 함수 정리 및 예제

안녕하세요. BlockDMask입니다.
오늘은 데이터를 정렬해주는 sorted() 함수에 대해서 알아보려고 합니다.

혹시 리스트의 sort() 메서드를 보시려면 [리스트 sort() 메서드 보러가기]를 참고해주세요.



<목차>

  1. sorted 함수 개요
  2. 리스트 정렬 예제
  3. 딕셔너리 key 정렬 예제
  4. 딕셔너리 value 정렬 (operator)
  5. 딕셔너리 value 정렬 (lambda)


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

댓글

이 블로그의 인기 게시물

[Windows] 윈도우 CMD로 재부팅, 종료, 시간 설정하는 방법 (shutdown 명령어 정리)

[Python] 파이썬 주석 사용법 (한 줄 주석, 여러 줄 주석, 단축키, 들여쓰기 주의사항)

[Python] 파이썬에서 None, null, is None 차이 정리