C

파이썬 딕셔너리 정렬하는 법 — 키·값 기준 정렬 완벽 가이드

2026-05-15 · Python · 파이썬 · 기초 · 딕셔너리

파이썬 딕셔너리 정렬, 왜 헷갈릴까?

파이썬 딕셔너리를 정렬하는 법은 입문자가 자주 검색하는 주제입니다. 딕셔너리 자체는 정렬해서 바꾸는 메서드가 없기 때문에, sorted() 함수로 정렬된 결과를 새로 만들어야 합니다. 참고로 파이썬 3.7부터 딕셔너리는 삽입 순서를 보존하므로, 정렬된 순서대로 새 딕셔너리를 만들면 그 순서가 유지됩니다.

기본 문법

예제로 사용할 딕셔너리입니다.

scores = {"민수": 80, "지영": 95, "철수": 70}

1. 키(key) 기준 정렬

by_key = dict(sorted(scores.items()))
print(by_key)
# {'민수': 80, '지영': 95, '철수': 70}  (가나다순)

scores.items()(키, 값) 튜플 목록을 주고, sorted()는 기본적으로 튜플의 첫 요소인 키로 정렬합니다.

2. 값(value) 기준 정렬

값으로 정렬하려면 key 인자에 lambda를 넘겨 "무엇을 기준으로 정렬할지"를 지정합니다.

by_value = dict(sorted(scores.items(), key=lambda item: item[1]))
print(by_value)
# {'철수': 70, '민수': 80, '지영': 95}  (점수 오름차순)

여기서 item("민수", 80) 같은 튜플이고, item[1]은 값을 가리킵니다.

3. 내림차순 정렬

desc = dict(sorted(scores.items(), key=lambda x: x[1], reverse=True))
print(desc)
# {'지영': 95, '민수': 80, '철수': 70}

실전 예제

값으로 정렬하되 같으면 키로 정렬(다중 기준)

튜플을 반환하면 앞 요소부터 차례로 비교합니다. 값은 내림차순, 같으면 키는 오름차순으로 정렬하는 예제입니다.

data = {"b": 2, "a": 2, "c": 1}
result = dict(sorted(data.items(), key=lambda x: (-x[1], x[0])))
print(result)
# {'a': 2, 'b': 2, 'c': 1}

-x[1]로 값은 내림차순, x[0]로 키는 오름차순이 됩니다.

키 목록·값 목록만 정렬해서 얻기

print(sorted(scores))                 # ['민수', '지영', '철수']  (키만)
print(sorted(scores.values()))        # [70, 80, 95]  (값만)
print(sorted(scores, key=scores.get)) # ['철수', '민수', '지영']  (값 기준 키 목록)

자주 하는 실수

  • .sort()를 딕셔너리에 호출: 딕셔너리에는 .sort() 메서드가 없습니다. 반드시 sorted() 함수를 사용하세요.
  • dict()로 다시 안 감싸기: sorted(scores.items())의 결과는 튜플 리스트입니다. 딕셔너리로 되돌리려면 dict(...)로 감싸야 합니다.
  • key 인자에 결과를 직접 넣기: key=item[1]처럼 쓰면 오류입니다. key에는 함수(또는 lambda)를 넘겨야 합니다.
  • 정렬 순서 보장 오해: 파이썬 3.6 이하에서는 딕셔너리 순서가 보장되지 않았습니다. 3.7 이상에서만 삽입 순서가 보존됩니다.

정렬 방법 비교

목적코드
키 오름차순dict(sorted(d.items()))
값 오름차순dict(sorted(d.items(), key=lambda x: x[1]))
값 내림차순dict(sorted(d.items(), key=lambda x: x[1], reverse=True))
값 기준 키 목록sorted(d, key=d.get)

자주 묻는 질문

Q. 정렬하면 원본 딕셔너리도 바뀌나요?

아니요. sorted()는 원본을 건드리지 않고 정렬된 새 결과를 반환합니다. 새 딕셔너리에 할당해서 사용하세요.

Q. operator.itemgetter는 무엇인가요?

lambda 대신 from operator import itemgetterkey=itemgetter(1)처럼 쓸 수 있습니다. 동작은 같지만 약간 더 빠르고, 다중 키 itemgetter(1, 0) 표현이 깔끔합니다.

Q. 값이 또 다른 딕셔너리일 때는 어떻게 정렬하나요?

중첩 딕셔너리는 lambda로 원하는 하위 키를 지정합니다. 예: sorted(users.items(), key=lambda x: x[1]["age"])처럼 값 딕셔너리의 특정 필드를 기준으로 삼습니다.

파이썬 딕셔너리 정렬하는 법 — 키·값 기준 정렬 완벽 가이드 | CodeMaster 블로그 | CodeMaster