1. key의 핵심 개념: “안경” 비유

우리가 데이터를 정렬할 때, 그냥 정렬하는 게 아니라 어떤 **‘특수한 안경’**을 쓰고 데이터를 본다고 생각해보세요.

  • 기본: [ "apple", "banana", "kiwi" ]를 그냥 보면 사전 순서대로 applebananakiwi입니다.

  • 길이 안경(key=len): 글자 길이를 보는 안경을 쓰고 보면 4(kiwi)5(apple)6(banana) 순서로 보입니다.

즉, key는 “데이터를 어떤 값으로 변환해서 비교할 것인가?”를 정해주는 기준값입니다.


2. 어떻게 쓰나요? (문법적 정체)

key는 함수를 값으로 받습니다. 보통 우리가 배운 len, str.lower 같은 함수 이름을 대입합니다.

Python

words = ["banana", "Pie", "apple"]

# 1. 기본 정렬 (대문자가 소문자보다 작으므로 Pie가 먼저 나옴)
print(sorted(words)) 
# ['Pie', 'apple', 'banana']

# 2. key를 사용한 정렬 (모두 소문자로 '간주하고' 정렬해!)
print(sorted(words, key=str.lower)) 
# ['apple', 'banana', 'Pie']

# 3. 길이를 기준으로 정렬 (글자 수만 봐!)
print(sorted(words, key=len)) 
# ['Pie', 'apple', 'banana'] (3글자, 5글자, 6글자 순)

3. key의 정체 요약 비교

구분설명
정체함수(sorted, max 등)의 선택적 매개변수 (Optional Argument)
하는 일비교하기 직전에 각 요소에 특정 함수를 적용해 그 결과값으로 비교함
들어가는 값함수 자체 (주의: len()처럼 괄호를 붙이지 않고 len 이름만 씀)
함수인가?아니요, 하지만 함수를 데이터로 넘겨받아 실행합니다.
키워드인가?파이썬 예약어는 아니지만, 인자 이름을 지정할 때 쓰는 키워드 인자(Keyword Argument) 형태입니다.

4. min(), max()에서의 활용

정렬뿐만 아니라 가장 큰 값/작은 값을 찾을 때도 key는 아주 강력합니다.

Python

# 절댓값이 가장 큰 수를 찾고 싶을 때
nums = [-10, 2, 5, -1]

print(max(nums))          # 결과: 5 (일반적인 숫자 크기)
print(max(nums, key=abs)) # 결과: -10 (절댓값 안경을 쓰면 -10이 10이 되어 가장 큼)

💡 한 줄 요약

key는 “어떤 기준으로 비교할지 결정해주는 ‘기준 함수’를 담는 바구니”입니다.

혹시 리스트 안에 튜플이 들어있을 때([('apple', 500), ('banana', 300)]), 가격만 쏙 뽑아서 정렬하고 싶은 경우도 궁금하신가요? 이때 사용하는 **lambda(람다)**라는 개념이 key와 찰떡궁합인데, 원하시면 이것도 쉽게 설명해 드릴 수 있어요!