본문 바로가기
Python

[Python] sorted() 함수

by 기리의 개발로그 2024. 3. 11.

sorted 함수

sorted 함수 는 매개변수로 들어온 반복가능한 자료형의 데이터를 새로운 정렬된 리스트로 반들어서 반환하는 함수이다.

sorted(x)
sorted(x, reverse 파라미터)
sorted(x, key 파라미터)
sorted(x, key 파라미터, reverse 파라미터)
  • x : 반복 가능한 자료(리스트, 튜플 등)
  • key 파라미터 : 어떤 것을 기준으로 정렬할지에 대한 값
  • reverse 파라미터 : 오름차순일지 내림차순일지에 대한 구분 값

sort()와 sorted()의 가장 큰 차이는 sort()는 본체의 리스트를 정렬해서 변환 후 반환하는 것이며 sorted()는 본체는 놔두고 정렬한 새로운 리스트를 만들어 반환한다.


sorted 함수 예제


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}')
origin                  : [2, 4, 1, 9, 100, 29, 40, 10]
sorted(a)               : [1, 2, 4, 9, 10, 29, 40, 100]
sorted(a, reverse=True) : [100, 40, 29, 10, 9, 4, 2, 1]

text = "python"
sorted_text = sorted(text)
print(text)
['h', 'n', 'o', 'p', 't', 'y']

key 파라미터에 일반함수를 넣어 사용할 수 있다.

def sorted_key(x):
    if isinstance(x, str):
        return (True, x)
    else:
        return (False, x)

mixted_list = [3, 'apple', 1, 'banana', 4, 'cherry', 2]
sorted_mixted_list = sorted(mixed_list, key=sorted_key)
print(sorted_mixted_list)
[1, 2, 3, 4, 'apple', 'banana', 'cherry']

일반적인 함수뿐만 아니라 람다함수와 함께 사용할 수 있다.

countries = [
  {'code': 'KR', 'name': 'Korea'},
  {'code': 'CA', 'name': 'Canada'},
  {'code': 'US', 'name': 'United States'},
  {'code': 'GB', 'name': 'United Kingdom'},
  {'code': 'CN', 'name': 'China'}
]

print(sorted(countries, key=lambda country: country["code"]))

print(sorted(countries, key=lambda country: country["name"]))
[{'code': 'CA', 'name': 'Canada'}, {'code': 'CN', 'name': 'China'}, {'code': 'GB', 'name': 'United Kingdom'}, {'code': 'KR', 'name': 'Korea'}, {'code': 'US', 'name': 'United States'}]

[{'code': 'CA', 'name': 'Canada'}, {'code': 'CN', 'name': 'China'}, {'code': 'KR', 'name': 'Korea'}, {'code': 'GB', 'name': 'United Kingdom'}, {'code': 'US', 'name': 'United States'}]

딕셔너리 key를 이용한 정렬은 다음과 같다.

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)
1. 기본 딕셔너리
{'a':66, 'i':20, 'e':30, 'd':33, 'f':50, 'g':60, 'c':22, 'h':80, 'b':11}

2. 키 정렬 sorted(d.items())
[('a', 66), ('b', 11), ('c', 22), ('d', 33), ('e', 30), ('f', 50), ('g', 60), ('h', 80), ('i', 20)]

3. 키 정렬 sorted(d.items(), reverse=True)
[('i', 20), ('h', 80), ('g', 60), ('f', 50), ('e', 30), ('d', 33), ('c', 22), ('b', 11), ('a', 66)]

4. 키만 정렬 sorted(d.keys())
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i]

5. 키만 정렬 sorted(d)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i]

딕셔너리 value를 이용한 정렬은 다음과 같다.

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)
1. 원본 딕셔너리
dict_items([('b', 400), ('f', 300), ('a', 200), ('d', 100), ('c', 500)])

2. 딕셔너리 정렬 : sorted(d.items())
[('a', 200), ('b', 400), ('c', 500), ('d', 100), ('f', 300)]

3. 딕셔너리 정렬 : sorted(d.items(), key=operator.itemgetter(1))
[('d', 100), ('a', 200), ('f', 300), ('b', 400), ('c', 500)]

4. 딕셔너리 정렬 : sorted(d.items(), key=operator.itemgetter(1), reverse=True)
[('c', 500), ('b', 400, ('f', 300), ('a', 200), ('d', 100)]
반응형

'Python' 카테고리의 다른 글

[Python] zip() 함수  (66) 2024.03.22
[Python] lamda() 함수  (72) 2024.03.12
[Python] degree(), radian() 함수  (77) 2024.03.08
[Python] 삼각함수(sin, cos, tan)  (79) 2024.03.07
[Python] isdecimal() 함수  (77) 2024.03.06

댓글