파이썬 sorted 함수

내가 정한 기준대로 정렬하는 법

Jun 12, 2025

데이터를 다루다 보면 꼭 마주치는 고민이 있다.
“어떤 기준으로 정렬하지?”

숫자를 크기순으로, 이름을 가나다순으로,
날짜는 오래된 순서로 정리해야 할 때,
파이썬에서는 sorted() 함수 하나면 충분하다.

하지만 처음엔 sort()와 헷갈리고,
key, lambda, reverse 같은 옵션이 낯설게 느껴졌다.

그래서 sorted()의 기본 개념부터
자료형별 사용법, 실전 예시, 그리고 자주 하는 실수까지
한 번에 정리했다.


1. sorted()와 sort()의 차이

항목 sorted() .sort()
사용 대상 모든 iterable (리스트, 튜플 등) 리스트만 사용 가능
반환값 새로운 리스트 반환 리스트 자체를 정렬 (None 반환)
원본 변경 하지 않음 변경함
사용 예시 sorted([3, 1, 2]) a = [3, 1, 2]; a.sort()

2. sorted()를 쓸 수 있는 자료형은?

•리스트 (list)
•튜플 (tuple)
•문자열 (str) ➡️ 정렬된 문자 리스트가 반환됨
•딕셔너리 (dict) ➡️ key 기준 정렬

sorted('hello')          # ['e', 'h', 'l', 'l', 'o']
sorted((3, 2, 1))         # [1, 2, 3]
sorted({'c': 3, 'a': 1})  # ['a', 'c']

3. sorted() 정렬 key 접근 방식 요약표

자료형 예시 key=lambda 식 설명
리스트(숫자) [50, 30, 70] key=lambda x: x 값 자체로 정렬
딕셔너리 {"name": "지희", "score": 85} key=lambda x: x['score'] 딕셔너리의 키로 접근
튜플 ("지희", 85) key=lambda x: x[1] 인덱스로 접근 (0, 1, 2…)
객체 Student("지희", 85) key=lambda x: x.score 속성명으로 접근 (.속성)

4. 자료형 예시

1) 리스트 (숫자만 있을 때)

nums = [50, 30, 70]
sorted_nums = sorted(nums, key=lambda x: x)

2) 딕셔너리

people = [{"name": "지희", "score": 85}, {"name": "정우", "score": 90}]
sorted_people = sorted(people, key=lambda x: x['score'], reverse=True)

3) 튜플

scores = [("지희", 85), ("정우", 90)]
sorted_scores = sorted(scores, key=lambda x: x[1], reverse=True)

4) 클래스 객체

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

students = [Student("지희", 85), Student("정우", 90)]
sorted_students = sorted(students, key=lambda x: x.score, reverse=True)

5) 핵심 공식 요약

[]딕셔너리 / 튜플
.클래스 객체
• 아무것도 안 쓰면 숫자/문자 리스트 자체

이 3가지만 기억하면 정렬은 어디든 적용 할 수 있다!


5. sorted()를 쓸 수 있는 조건과 규칙

핵심 조건: 정렬의 기준이 명확한 “값”이 존재할 때

  1. 숫자 (총점, 나이, 점수, 길이 등)
  2. 문자열 (이름, 알파벳순, 파일명 등)
  3. 날짜 (가입일, 생일, 업데이트 시각 등)

6. sorted 공식

sorted(데이터, key=lambda x: x.비교할속성, reverse=True/False)
목표 sorted 공식
점수 높은 순 정렬 sorted(data, key=lambda x: x.score, reverse=True)
이름 오름차순 정렬 sorted(data, key=lambda x: x.name)
길이 짧은 것부터 정렬 sorted(data, key=lambda x: len(x))
날짜 오래된 순 정렬 sorted(data, key=lambda x: x.date)

7. for문 → sorted 변환

• 상황: 데이터를 기준값에 따라 정렬해서 그 순서대로 무언가를 하고 싶을 때

1) for 문

# 원래 비교 기반 방식
for a in data:
    rank = 1
    for b in data:
        if b.📌속성 > a.📌속성:
            rank += 1
    a.순위 = rank

2) sorted 문

# 정렬 기반 방식
sorted_data = sorted(data, key=lambda x: x.📌속성, reverse=True)

for rank, item in enumerate(sorted_data, start=1):
    item.순위 = rank

여기서 핵심은 “비교 기준이 되는 속성” 이 뭐지?
그걸 key=lambda x: x.속성에 넣어주면 🆗

3) 기본 구조 비교

일반 for문 구조 sorted 적용 구조
for item in data: sorted_data = sorted(data, key=___, reverse=___)
# 기준 비교: item.속성 비교 for rank, item in enumerate(sorted_data, start=1):
item.순위 = rank item.순위 = rank

“정렬된 순서 = 순위다!” 단, 비교 기준만 정확히 알면
sorted() + enumerate()로 깔끔하게 바꿀 수 있다.


오늘을 마치며

정렬은 단순한 기술이 아니라
데이터의 우선순위를 판단하는 일이다.

sorted()는 그 판단을 코드로 표현하는 도구다.
숫자, 문자열, 날짜, 클래스 객체까지
내가 원하는 기준을 명확히 정할 수 있다면
정렬은 언제나 가장 강력한 도우미가 되어줄 것이다.

정렬 기준을 안다는 건 데이터를 읽는 눈을 갖는다는 뜻 👀

그 눈을 갖추는 첫걸음, 바로 sorted()에서 시작된다.