파이썬에서는 정렬을 해주는 내장함수가 존재한다. 내장함수 sort
와 메소드 sorted
는 어떤 차이가 있고 어떻게 활용이 가능한 지 알아보자
sort
는 리스트 정렬 메소드로 기존의 리스트를 정렬하고 None
을 반환한다.
리스트만 정렬가능하며 딕셔너리, 튜플 등은 sort
를 사용할 수 없다.
list_a=[3,2,1,4,5]
list_a.sort()
print(list_a)
# 결과: [1, 2, 3, 4, 5]
sorted
는 sort
와 달리 iterable 객체
에서 모두 사용 가능하다. 새로운 객체를 반환하기 때문에 sort
보다는 속도가 느리다.
list_a = [3, 2, 1, 4, 5]
list_b=sorted(list_a)
print(list_b)
# 결과: [1, 2, 3, 4, 5]
딕셔너리 자료형에서 키를 기준으로 정렬하는 방법 중 하나는 items
메소드와 sorted
함수, dict
함수를 사용하면 된다.
from collections import defaultdict
dict_a = defaultdict(str)
dict_a[3]
dict_a[2]
dict_a[1]
print(dict(sorted(dict_a.items())))
# 결과: {1: '', 2: '', 3: ''}
만약 딕셔너리에서 값을 기준으로 정렬을 하고 싶다면 어떻게 해야할까? sorted
함수의 key
를 이용하는 방법이 있다!
key
sort
와 sorted
에는 key
매개변수가 존재하는데 key
와 lambda
함수를 활용하여 원하는 기준으로 정렬할 수 있다.
dict_a = {
"라면": 1000,
"과자": 1200,
"커피": 3800,
"사탕": 500
}
dict_b = dict(sorted(dict_a.items(), key=lambda x: x[1]))
print(dict_b)
# 결과: {'사탕': 500, '라면': 1000, '과자': 1200, '커피': 3800}
튜플을 정렬하는데 튜플의 첫번째 값을 기준으로 오름차순 정렬하고 첫번째 값이 같다면 튜플의 두번째 값을 기준으로 내림차순 정렬하는 예시이다.
dict_a = [(1, 100), (3, 300), (2, 100), (4, 700), (3, 900)]
dict_b = sorted(dict_a, key=lambda x: (x[0], -x[1]))
print(dict_b)
# 결과: [(1, 100), (2, 100), (3, 900), (3, 300), (4, 700)]
이처럼 key
에서 -부호를 붙여서 내림차순 정렬을 할 수 있지만 sort
와 sorted
함수에는 reverse
파라미터가 존재한다.
reverse
내림차순으로 정렬하고자 한다면 reverse
를 True
로 설정하면 된다.
list_a = [5, 4, 2, 1, 3, 8, 7, 6, 9, 10]
print(sorted(list_a, reverse=True))
# 결과: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]