key_파라미터

매일 공부(ML)·2022년 6월 7일
0

이어드림

목록 보기
68/146

복잡한 기준을 사용해 정렬할 때는 key파라미터를 사용해라

  • sort는 여러 가지 순서를 지원하는 경우에는 사용할 수 없다.

    • 호출하는 객체 비교 특별 메세드가 정의되지 않기에 위와 같은 타입은 정렬할 수 없다.

key함수

  • sort의 이러한 단점을 해결.
  • 정렬에 사용하고 싶은 애트리뷰트가 객체에 들어 있는 경우 지원하기 위해서 sort의 key파라미터 활용.
  • key는 함수이어야한다.
    • 원소 대신 정렬 기준을 사용해야한다.
    • 비교 가능한 값이어야한다.

  • lambda함수 활용
    • 원소 애트리뷰트에 접근
    • 인덱스르 써서 값을 더는다.
    • 문자열 같은 기본 타입도 원소 값을 변형하여 정렬 가능
    • 제대로 작동하는 모든 식 다 가능
class Tool:
    def __init__(self, name, weight):
        self.name =name
        self.weight = weight

    def __reor__(self):
        return f'Tool({self.name!r}, {self.weight})'

tools = [
    Tool('수준계', 3.5),
    Tool('해머', 1.25),
    Tool('스크류드라이버',0.5),
    Tool('끌',0.25),
]

print('미정렬:', repr(tools))
tools.sort(key=lambda x: x.name)
print('\n정렬:', tools)

#미정렬: [Tool('수준계',3.5),Tool('해머',1.25), Tool('스크류드라이버', 0.5), Tool('끌', 0.25)]

#정렬: [Tool('끌',0.25),Tool('수준계',3.5), Tool('스크류드라이버', 0.5), Tool('해머', 1.25)]

  • 정렬 기준이 두 개 이상일 경우
power_tools = [
    Tool('드릴', 4),
    Tool('원형 톱', 5),
    Tool('착암기', 40),
    Tool('연마기', 4),
]

power_tools.sort(key=lambda x: x.name) #name기준 오름차순
power_tools.sort(key=lambda x: x.weight, reverse = True) #weigjt기준 내림차순
print(power_tools)

#[Tool('적암기 ', 40), Tool('원형 ', 5), Tool( '드릴', 4), Tool(' 연마' , 4)]
profile
성장을 도울 아카이빙 블로그

0개의 댓글