파이썬 딕셔너리(Dictionary) 완벽 정리: 추가, 삭제, 반복, 정렬 한 번에 커버 이미지
개발자

파이썬 딕셔너리(Dictionary) 완벽 정리: 추가, 삭제, 반복, 정렬 한 번에

파이썬 딕셔너리(dictionary) 사용법을 한 곳에 정리했습니다. 값 추가·수정, get()으로 안전하게 값 가져오기, items() 반복문, 키·값 기준 정렬, 딕셔너리 합치기, 그리고 defaultdict·Counter 활용까지. 모든 예제는 복사해서 바로 실행할 수 있습니다.

코딩하는 상인·· 읽기 6출처 없음

파이썬에서 리스트만큼이나 자주 쓰는 자료형이 딕셔너리입니다. 키-값 쌍으로 데이터를 다루기 때문에 검색도 많죠. "파이썬 딕셔너리 추가", "키 값 가져오기", "딕셔너리 반복문", "딕셔너리 정렬"… 매번 비슷한 걸 찾게 됩니다.

이 글은 파이썬 딕셔너리의 핵심 사용법을 한 곳에 모았습니다. 추가·삭제·탐색·반복·정렬까지, 전부 복사해서 바로 쓸 수 있게 정리했습니다. 북마크해두고 필요할 때마다 꺼내 쓰세요.

동작 환경: Python 3.7+ (이 버전부터 딕셔너리가 삽입 순서를 보장합니다)


딕셔너리 생성과 기본

d = {"a": 1, "b": 2}       # 기본 생성
d = {}                     # 빈 딕셔너리 (주의: set이 아님)
d = dict(a=1, b=2)         # 키워드 인자로 생성
d = dict([("a", 1), ("b", 2)])   # 튜플 리스트로 생성

# 두 리스트를 딕셔너리로
keys = ["a", "b", "c"]
vals = [1, 2, 3]
d = dict(zip(keys, vals))  # {'a': 1, 'b': 2, 'c': 3}

d["a"]                     # 1 — 값 접근
len(d)                     # 키 개수

값 추가 / 수정

딕셔너리는 추가와 수정 문법이 같습니다. 키가 있으면 수정, 없으면 추가됩니다.

d = {"a": 1}

d["b"] = 2                 # 추가 → {'a': 1, 'b': 2}
d["a"] = 100               # 수정 → {'a': 100, 'b': 2}

# 여러 개 한 번에 추가/수정
d.update({"c": 3, "d": 4})

# 키가 없을 때만 추가 (있으면 무시)
d.setdefault("a", 999)     # a는 이미 있으므로 변화 없음
d.setdefault("e", 5)       # e는 없으므로 추가

값 가져오기 (get으로 안전하게)

없는 키를 d[key]로 접근하면 KeyError가 납니다. get()을 쓰면 에러 없이 처리할 수 있습니다.

d = {"a": 1, "b": 2}

d["c"]                     # ❌ KeyError 발생!
d.get("c")                 # None (에러 없음)
d.get("c", 0)              # 0 (기본값 지정)

# 키 존재 확인
"a" in d                   # True
"c" not in d               # True

# 카운팅에 자주 쓰는 패턴
cnt = {}
for ch in "banana":
    cnt[ch] = cnt.get(ch, 0) + 1
# {'b': 1, 'a': 3, 'n': 2}

값 삭제 (pop, del, clear)

d = {"a": 1, "b": 2, "c": 3}

d.pop("a")                 # 키 'a' 삭제하고 값 1 반환
d.pop("x", None)           # 없는 키여도 기본값 반환 (에러 방지)
del d["b"]                 # 키 'b' 삭제
d.clear()                  # 전체 비우기 → {}

# 마지막 삽입 항목 삭제 (Python 3.7+)
d = {"a": 1, "b": 2}
d.popitem()                # ('b', 2) 반환하고 삭제

반복문 (keys, values, items)

딕셔너리를 순회하는 방법입니다. 검색량이 매우 높은 부분입니다.

d = {"a": 1, "b": 2, "c": 3}

# 키만 순회 (기본)
for key in d:
    print(key)

# 값만 순회
for value in d.values():
    print(value)

# 키-값 동시에 (가장 많이 씀)
for key, value in d.items():
    print(key, value)

# 리스트로 변환
list(d.keys())             # ['a', 'b', 'c']
list(d.values())           # [1, 2, 3]
list(d.items())            # [('a', 1), ('b', 2), ('c', 3)]

딕셔너리 정렬

딕셔너리 자체는 정렬 개념이 없지만, sorted()로 정렬된 결과를 얻을 수 있습니다.

d = {"banana": 3, "apple": 1, "cherry": 2}

# 키 기준 정렬
sorted(d.items())                              # [('apple', 1), ('banana', 3), ('cherry', 2)]

# 값 기준 정렬
sorted(d.items(), key=lambda x: x[1])          # [('apple', 1), ('cherry', 2), ('banana', 3)]

# 값 기준 내림차순
sorted(d.items(), key=lambda x: x[1], reverse=True)

# 정렬 결과를 다시 딕셔너리로
dict(sorted(d.items(), key=lambda x: x[1]))

# 값이 가장 큰 키
max(d, key=d.get)                              # 'banana'

정렬 기준 지정과 다중 정렬에 대한 더 자세한 내용은 [파이썬 정렬 완벽 정리] 글을 참고하세요.


딕셔너리 합치기

d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}

# Python 3.9+ — | 연산자
merged = d1 | d2           # {'a': 1, 'b': 3, 'c': 4}  (겹치면 뒤쪽 우선)

# Python 3.5+ — 언패킹
merged = {**d1, **d2}

# 제자리 병합
d1.update(d2)              # d1이 직접 갱신됨

딕셔너리 컴프리헨션

# 제곱 딕셔너리
squares = {x: x ** 2 for x in range(5)}        # {0:0, 1:1, 2:4, 3:9, 4:16}

# 조건 필터링
filtered = {k: v for k, v in d.items() if v > 1}

# 키-값 뒤집기
inverted = {v: k for k, v in d.items()}

defaultdict와 Counter (강력한 도구)

기본 딕셔너리의 번거로움을 줄여주는 collections 모듈입니다.

from collections import defaultdict, Counter

# defaultdict: 없는 키 접근 시 기본값 자동 생성
graph = defaultdict(list)
graph["a"].append("b")     # 키 'a'가 없어도 [] 자동 생성 후 추가

cnt = defaultdict(int)
for ch in "banana":
    cnt[ch] += 1           # get(ch, 0) 없이 바로 사용

# Counter: 개수 세기를 한 줄로
c = Counter("banana")      # {'a': 3, 'n': 2, 'b': 1}
c.most_common(2)           # 상위 2개 → [('a', 3), ('n', 2)]

자주 묻는 질문

Q. 딕셔너리 키로 쓸 수 있는 자료형은? 변경 불가능한(immutable) 값만 키로 쓸 수 있습니다. 문자열, 숫자, 튜플은 가능하지만 리스트나 딕셔너리는 키로 쓸 수 없습니다.

Q. 빈 딕셔너리와 빈 집합(set)을 어떻게 구분하나요? {}는 빈 딕셔너리입니다. 빈 집합을 만들려면 set()을 써야 합니다.

Q. 딕셔너리는 순서가 보장되나요? Python 3.7부터 삽입한 순서대로 유지됩니다. 그 이전 버전에서는 순서가 보장되지 않으니 collections.OrderedDict를 써야 합니다.

Q. 두 딕셔너리를 합칠 때 키가 겹치면? 나중에 합쳐지는 쪽의 값으로 덮어쓰입니다. d1 | d2에서 겹치는 키는 d2의 값이 남습니다.


마무리

파이썬 딕셔너리의 핵심은 **추가·수정은 d[key] = value, 안전한 조회는 get(), 순회는 items()**입니다. 그리고 없는 키를 다룰 때 get()이나 defaultdict를 활용하면 KeyError를 깔끔하게 피할 수 있습니다.

개수 세기나 그룹핑처럼 반복적인 작업은 Counterdefaultdict로 코드를 크게 줄일 수 있으니, 이 두 가지는 꼭 익혀두세요. 필요할 때마다 이 글을 다시 펼쳐 해당 섹션을 복사해 쓰면 됩니다.

함께 보면 좋은 글: [파이썬 리스트 완벽 정리], [파이썬 정렬 완벽 정리]

함께 보면 좋은 글