안녕하세요. BlockDMask입니다.
오늘은 데이터를 정렬해주는 sorted 함수에 대해서 알아보려고 합니다.
혹시 리스트의 sort 함수를 생각하고 들어오신 분들은 [바로가기] 해당 포스팅에 리스트 정렬 sort 함수에 대해서 정리가 되어있습니다.
<목차>
1. sorted 함수에 대해서
2. sorted 함수 예제
1. 파이썬 정렬 sorted 함수 정리
sorted(정렬할 데이터)
sorted(정렬할 데이터, reverse 파라미터)
sorted(정렬할 데이터, key 파라미터)
sorted(정렬할 데이터, key 파라미터, reverse 파라미터)
sorted 함수는 파이썬 내장 함수입니다.
첫 번째 매개변수로 들어온 이터러블한 데이터를 새로운 정렬된 리스트로 만들어서 반환해 주는 함수입니다.
- 첫 번째 매개변수로 들어올 "정렬할 데이터"는 iterable 한 데이터 이어야 합니다.
아래 옵션(파라미터)은 다 기본값으로 들어가 있기 때문에 sorted(정렬 데이터)만 넣어도 충분합니다.
- key 옵션 (key 파라미터)
sorted 함수의 key 파라미터는 어떤 것을 기준으로 정렬할 것인가? 에 대한 기준입니다.
즉, key 값을 기준으로 비교를 하여 정렬을 하겠다는 것인데, 이것을 정해 줄 수 있는 파라미터입니다.
sorted( ~~ , key=뭐뭐)로 입력하게 되면 해당 키를 기준으로 정렬하여 반환합니다.
- reverse 옵션 (reverse 파라미터)
해당 파라미터를 이용하면 오름차순으로 정렬할지 내림차순으로 정렬할지 정할 수 있습니다.
디폴트로는 reverse=False로 오름차순으로 정렬이 됩니다.
sorted( ~~ , reverse=True)로 입력하게 되면 내림차순으로 정렬하여 반환합니다.
** 리스트.sort()와 sorted(리스트)의 가장 큰 차이는
리스트.sort() 는 본체의 리스트를 정렬해서 변환하는 것이고,
sorted(리스트) 는 본체 리스트는 내버려두고, 정렬한 새로운 리스트를 반환하는 것입니다.
리스트.sort()에 대해 더 알고 싶다면, 리스트를 정렬 해둔 포스팅으로 가면 됩니다.
해당 포스팅에는 리스트의 sort() 메서드에 대한 예제가 나와있습니다.
2. 파이썬 정렬 sorted 함수 예제
2-1) sorted 함수 예제 : 리스트 정렬
1
2
3
4
5
6
7
8
9
|
a = [2, 4, 1, 9, 100, 29, 40, 10]
b = sorted(a)
c = sorted(a, reverse=True)
print(f'origin : {a}')
print(f'sorted(a) : {b}')
print(f'sorted(a, reverse=True) : {c}')
|
cs |
sorted 함수를 이용해서 리스트를 정렬해 보았습니다.
리스트 자체 함수인 sort는 해당 리스트를 정렬하는 것과 달리
이 sorted 함수는 정렬한 새로운 리스트를 반환하는 것을 볼 수 있습니다.
정렬된 리스트 = sorted(기존 리스트)
또한, sorted 함수의 reverse 파라미터(옵션)를 True로 변경하면 내림차순으로 정렬하는 것을 볼 수 있습니다.
2-2) sorted 함수 예제 : 딕셔너리 key 정렬
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# 딕셔너리
d = dict()
d['a'] = 66
d['i'] = 20
d['e'] = 30
d['d'] = 33
d['f'] = 50
d['g'] = 60
d['c'] = 22
d['h'] = 80
d['b'] = 11
# 1. 딕셔너리 출력
print("\n1. 기본 딕셔너리")
print(d)
# 딕셔너리 키 정렬 오름차순(디폴트)
print("\n2. 키 정렬 sorted(d.items())")
f = sorted(d.items())
print(f)
# 딕셔너리 키 정렬 내림차순
print("\n3. 키 정렬 sorted(d.items(), reverse=True)")
g = sorted(d.items(), reverse=True)
print(g)
# 딕셔너리 키만 정렬 및 출력1
print("\n4. 키만 정렬 sorted(d.keys())")
h = sorted(d.keys())
print(h)
# 딕셔너리 키만 정렬 및 출력2
print("\n5. 키만 정렬 sorted(d)")
i = sorted(d)
print(i)
|
cs |
이렇게 딕셔너리의 키 값을 기준으로 정렬을 할 수 있습니다.
sorted(딕셔너리.items())을 이용해서 키값을 기준으로 정렬을 하고, value도 그게 맞게 따라가서 출력되도록 할 수 있고,
그게 아니라 딕셔너리의 key 만 필요하다면
sorted(딕셔너리.keys()) 혹은 sorted(딕셔너리)을 이용하면 잘 정렬되는 것을 볼 수 있습니다.
역시 보면 sorted 함수의 반환형은 딕셔너리라 하더라도 [] 대괄호로 묶여있는 걸 확인할 수 있습니다.
즉, sorted 함수의 반환형은 리스트 타입입니다. sorted 함수의 인자로 들어온 딕셔너리를 정렬해서 리스트 타입으로 반환해주는 것을 확인할 수 있습니다.
예제 2, 3번을 보면 딕셔너리의 key, value쌍들이 리스트 안에 각 튜플 타입으로 변환되어 들어가 있는 것을 볼 수 있습니다.
[('i', 20), ('h', 80), ('g', 60), ('f', 50), ('e', 30), ('d', 33), ('c', 22), ('b', 11), ('a', 66)] 전체적으로는 리스트로 감싸여 있고 리스트 안의 값으로 튜플 타입으로 되어있는 것을 볼 수 있습니다.
정리 : sorted 함수로 딕셔너리 정렬을 하게 되면, key, value가 각각 튜플로 묶이고 그것들의 리스트로 만들어서 반환해 주는 것을 알 수 있습니다.
2-3) sorted 함수 예제 : 딕셔너리 value 정렬 (operator 모듈 이용)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import operator
d = {'b': 400, 'f': 300, 'a': 200, 'd': 100, 'c': 500}
print('1. 원본 딕셔너리')
print(d.items())
print('\n2. 딕셔너리 정렬 : sorted(d.items())')
f = sorted(d.items())
print(f)
print('\n3. 딕셔너리 정렬 : sorted(d.items(), key=operator.itemgetter(1))')
g = sorted(d.items(), key=operator.itemgetter(1))
print(g)
print('\n4. 딕셔너리 정렬 : sorted(d.items(), key=operator.itemgetter(1), reverse=True)')
h = sorted(d.items(), key=operator.itemgetter(1), reverse=True)
print(h)
|
cs |
딕셔너리의 value를 기준으로 sorted함수를 이용하여 정렬을 하기 위한 첫 번째 방법입니다.
operator 모듈의 itemgetter 함수를 이용하여서 딕셔너리의 value 값에 접근을 하여 그 값을 기준으로 정렬해달라 할 수 있습니다.
아래와 같이 말이죠.
sorted(딕셔너리.items(), key=operator.itemgetter(1))
2-4) sorted 함수 예제 : 딕셔너리 value 정렬 (lambda 이용)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import operator
d = {'blockdmask': 400, 'equal': 300, 'apple': 200, 'dish': 100, 'cook': 500}
print('1. 원본 딕셔너리')
print(d.items())
print('\n2. 딕셔너리 정렬 : sorted(d.items())')
f = sorted(d.items())
print(f)
print('\n3. 딕셔너리 정렬 : sorted(d.items(), key=lambda x: x[1])')
g = sorted(d.items(), key=lambda x: x[1])
print(g)
print('\n4. 딕셔너리 정렬 : sorted(d.items(), key=lambda x: x[1], reverse=True)')
h = sorted(d.items(), key=lambda x: x[1], reverse=True)
print(h)
|
cs |
sorted 함수에서 딕셔너리 value를 기준으로 정렬을 하기 위한 두 번째 방법은 람다를 이용하는 것입니다.
sorted(딕셔너리.items(), key=lambda x: x[1]) 이를 이용해서 key=를 x로 세팅해주어서 정렬하도록 할 수 있습니다.
이상으로 파이썬 내장 함수인 sorted 함수에 대해서 알아보았습니다.
사용할 때 편하게 응용하시라고 최대한 많은 예제를 다루어 보았습니다.
이제 정렬을 쉽게 하실 수 있겠죠?
감사합니다.
'<개인공부> > [Python]' 카테고리의 다른 글
[python] 파이썬 람다(lambda) 함수 설명 및 예제 (1) | 2021.05.05 |
---|---|
[python] 파이썬 range 함수 정리 및 예제 (숫자 구하기) (0) | 2021.05.03 |
[python] 파이썬 split 함수 정리 및 에제 (문자열 쪼개기) (4) | 2021.01.21 |
[python] 파이썬 join 함수 정리 및 예제 (문자열 합치기) (3) | 2021.01.14 |
[python] 파이썬 True, False 불(bool) 자료형 사용법 및 예제 총정리 (2) | 2021.01.08 |
[python] 파이썬 출력 print 정리 및 예제 (0) | 2021.01.06 |
[python] 파이썬 입력 input 정리 및 예제 (1) | 2021.01.04 |
[python] 파이썬 문자열 String 메서드 정리 (count, find, upper, lower, strip, replace) (1) | 2021.01.01 |