Today I Learned 35 - Python / key 사용하여 정렬하기 (.sort(), sorted())

angie·2022년 8월 17일
0

Python

목록 보기
10/11
post-thumbnail

sorted(), .sort() 기본 문법

sorted()

syntax
sorted( <iterable> , key = <function> , reverse = <bool>)
  • 원본 내용을 바꾸지 않고, 새롭게 정렬한 값을 반환
  • key : 정렬할 기준을 정할 수 있다.
  • reverse : True이면 내림차순, False이면 오름차순

.sort()

syntax
<list>.sort(key = <function>, reverse = <bool>)
  • 원본 리스트를 수정
  • 반환값은 None (혼돈을 피하기 위함)

키 함수 사용하는 법

list.sort()sorted()는 모두 비교하기 전에 각 리스트 요소에 대해 호출할 함수를 지정하는 key매개 변수를 지정할 수 있다.

예시1

대소 문자를 구분하지 않는 문자열의 비교

sorted("This is a test string from Andrew".split(), key=str.lower)

# 결과 : ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

예시2

일반적인 패턴으로, 객체의 인덱스 중 일부를 키로 사용하여 복잡한 객체를 정렬하는 방법이다.

student_tuples = [
        ('john', 'A', 15),
        ('jane', 'B', 12),
        ('dave', 'B', 10),
]
# 2번째 인덱스 값인 나이를 기준으로 정렬
sorted(student_tuples, key=lambda student: student[2])

# 결과 : [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

예시3

값들을 내가 정한 순서대로 정렬하는 방법이다.

# 정렬하고자 하는 자료
y_data_list = [2, 1, 3, 3, 3, 4, 1, 2, 2, 1]

# 정렬 기준을 저장한 딕셔너리
priority_dict = {4: 0, 2: 1, 3: 2, 1: 3}

# 딕셔너리의 값을 기준으로 정렬
# sorted 사용
sorted(my_data_list, key=lambda x: priority_dict[x])
# sort 사용
my_data_list.sort(key=lambda x: priority_dict[x])

# 결과 : > [4, 2, 2, 2, 3, 3, 3, 1, 1, 1]

예시4

: 다중조건

key함수로 여러가지 조건을 넣어 정렬하는 방법이다. 정렬할 때 비교하는 두 값이 조건1에 대해 우선순위가 동일하다면, 조건2를 적용하여 정렬하게 된다. 조건이 복수일 때는 튜플로 묶어서 key로 넣어준다.

array = (('b', 1, '나'), ('c', 2, '라'), ('a', 3, '다'), ('a', 7, '가'), ('c', 3, '가'))

print(sorted(array, key=lambda x: (x[0], x[1]))) # 0번, 1번 키(알파벳, 숫자)
print(sorted(array, key=lambda x: (x[0], x[2]))) # 0번, 2번 키(알파벳, 한글)

# 출력
# [('a', 3, '다'), ('a', 7, '가'), ('b', 1, '나'), ('c', 2, '라'), ('c', 3, '가')]
# [('a', 7, '가'), ('a', 3, '다'), ('b', 1, '나'), ('c', 3, '가'), ('c', 2, '라')]
profile
better than more

0개의 댓글