파이썬 딕셔너리(Dictionary) 완벽 정리: 추가, 삭제, 반복, 정렬 한 번에
파이썬 딕셔너리(dictionary) 사용법을 한 곳에 정리했습니다. 값 추가·수정, get()으로 안전하게 값 가져오기, items() 반복문, 키·값 기준 정렬, 딕셔너리 합치기, 그리고 defaultdict·Counter 활용까지. 모든 예제는 복사해서 바로 실행할 수 있습니다.
파이썬에서 리스트만큼이나 자주 쓰는 자료형이 딕셔너리입니다. 키-값 쌍으로 데이터를 다루기 때문에 검색도 많죠. "파이썬 딕셔너리 추가", "키 값 가져오기", "딕셔너리 반복문", "딕셔너리 정렬"… 매번 비슷한 걸 찾게 됩니다.
이 글은 파이썬 딕셔너리의 핵심 사용법을 한 곳에 모았습니다. 추가·삭제·탐색·반복·정렬까지, 전부 복사해서 바로 쓸 수 있게 정리했습니다. 북마크해두고 필요할 때마다 꺼내 쓰세요.
동작 환경: 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를 깔끔하게 피할 수 있습니다.
개수 세기나 그룹핑처럼 반복적인 작업은 Counter와 defaultdict로 코드를 크게 줄일 수 있으니, 이 두 가지는 꼭 익혀두세요. 필요할 때마다 이 글을 다시 펼쳐 해당 섹션을 복사해 쓰면 됩니다.
함께 보면 좋은 글: [파이썬 리스트 완벽 정리], [파이썬 정렬 완벽 정리]