파이썬 딕셔너리 사용법
키-값 짝으로 데이터를 묶는 두 번째 자료구조. JSON·설정·DB 결과가 다 이 모양.
학생 30명의 성적을 리스트에 넣으면 scores[3] 이 누구 점수인지 알 수가 없습니다. 이름과 점수가 짝이어야 의미가 생기죠. 그게 딕셔너리(dict) — 키(라벨) 와 값을 짝지어 묶는 자료구조입니다. 사용자 프로필·API 응답·설정 파일·환경 변수 — 파이썬에서 마주치는 데이터의 70% 가 이 모양입니다.
6편을 마치면 ① 딕셔너리 만들기와 키로 조회 ② 추가·수정·삭제 ③ get 으로 안전 조회 ④ keys·values·items 순회 ⑤ JSON 과의 거의 같은 관계 — 다섯 동작을 손에 익힙니다.
딕셔너리 만들기와 키로 조회
중괄호 { } 안에 키: 값 짝을 쉼표로. 키는 보통 문자열이지만 정수·튜플도 됩니다.
user = {
"name": "준성",
"age": 30,
"role": "dev",
"active": True
}
user["name"] # '준성' — 키로 접근
user["age"] # 30
user["height"] # ❌ KeyError — 없는 키
len(user) # 4 — 항목 수
리스트가 nums[3] 으로 위치를 가리킨다면, 딕셔너리는 user["name"] 으로 이름표를 가리킵니다. 순서가 아니라 의미로 접근한다는 차이가 핵심. 그래서 코드가 한결 읽힙니다 — row[2] 보다 row["age"] 가 의도가 명확하죠.
📌 키로 쓸 수 있는 것 / 못 쓰는 것
OK: 문자열·정수·실수·튜플·bool 같은 불변(immutable) 자료형. NG: 리스트·딕셔너리·집합 같은 가변 자료형. {[1,2]: "a"} 는 TypeError. 키는 한 번 정해지면 안 바뀐다는 보장이 필요하기 때문.
추가·수정·삭제
리스트와 다르게 같은 문법으로 추가·수정이 됩니다. 이미 있는 키면 덮어쓰고, 없는 키면 새로 만들어요.
user["email"] = "[email protected]" # 새 키 추가
user["age"] = 31 # 기존 값 수정
del user["active"] # 키 삭제
user.pop("role") # 키 제거하고 값 돌려줌 → 'dev'
user.pop("nope", "default") # 없으면 기본값 반환 (KeyError X)
# 한 번에 여러 키 합치기 (3.9+)
extra = {"city": "서울", "lang": "ko"}
user |= extra # 또는 user.update(extra)
입력값 검증 없이 데이터를 합칠 때 |= 또는 update() 가 편합니다. 같은 키가 있으면 오른쪽 값이 이깁니다.
get 으로 안전한 조회 — KeyError 없이
없는 키를 user["nope"] 으로 부르면 KeyError 가 터집니다. 사용자 입력·API 응답처럼 키가 있을지 없을지 모르는 상황이 95% 거든요. 이때 get 메서드가 답.
user.get("name") # '준성' — 있으면 값
user.get("nope") # None — 없어도 에러 없음
user.get("nope", "미입력") # '미입력' — 기본값 지정
user.get("age", 0) + 1 # 31 (없으면 0+1)
# 키 존재 여부만
"email" in user # True/False
실무에서는 get(키, 기본값) 패턴이 80%. 사용자 폼 데이터에서 선택 입력 항목 처리, API 응답에서 누락 필드 방어, 설정 파일 기본값 — 모두 같은 패턴입니다.
user.get(키, 기본값) — 가장 짧음. ② if 키 in user: ... — 명시적. ③ try/except KeyError — 12편에서. 입문자는 ①·②만 쓰세요. try 는 정말 예외 상황에만.
순회 — keys·values·items
딕셔너리를 통째로 돌면서 모든 항목을 처리할 때 세 가지 방법.
user = {"name": "준성", "age": 30, "role": "dev"}
# 1) 키만
for k in user: # 또는 user.keys()
print(k)
# name / age / role
# 2) 값만
for v in user.values():
print(v)
# 준성 / 30 / dev
# 3) 키-값 한꺼번에 (가장 자주 씀)
for k, v in user.items():
print(f"{k}: {v}")
# name: 준성
# age: 30
# role: dev
items() 가 가장 강력합니다. 키와 값을 동시에 두 변수에 풀어서 받는 걸 언패킹(unpacking)이라 부르고, 파이썬 곳곳에서 만납니다.
딕셔너리는 JSON 의 쌍둥이
웹 API 가 돌려주는 JSON 응답을 파이썬에서 받으면 거의 그대로 딕셔너리가 됩니다.
import json
s = '{"name": "준성", "age": 30, "skills": ["Python", "Linux"]}'
data = json.loads(s) # str → dict
data["name"] # '준성'
data["skills"][0] # 'Python' — 중첩도 자연스럽게
# 거꾸로
back = json.dumps(data, ensure_ascii=False)
# '{"name": "준성", "age": 30, ...}'
설정 파일·API 응답·로그 한 줄 — JSON 을 다루는 모든 파이썬 코드는 결국 dict 다루기입니다. 23편 웹 크롤링에서 이 연결이 가장 빛납니다.
마무리 — 자료구조 4총사가 모였다
지금까지 배운 자료구조를 정리해봅니다.
| 자료구조 | 모양 | 특징 | 대표 용도 |
|---|---|---|---|
| 문자열 str | "hello" | 불변·순서 있음 | 텍스트 |
| 리스트 list | [1, 2, 3] | 가변·순서 있음·인덱스 | 여러 값 묶음 |
| 딕셔너리 dict | {"k": "v"} | 가변·키-값·키로 접근 | 의미 있는 데이터 |
| (다음 편) 튜플 | (1, 2) | 불변·순서 있음 | 못 바꾸는 묶음 |
다음 미션 — REPL 에서: ① 본인 프로필 dict 만들기(name·age·hobbies 리스트 포함) ② get 으로 없는 키 조회해보기 ③ items() 로 키-값 둘 다 한 줄씩 출력하기.
다음 편 미리보기
7편 — "파이썬 if 문": 조건 분기. 비교 연산자·논리 연산자·elif·들여쓰기 규칙. 자료구조까지 배운 다음 흐름 제어로.
← 5편 "리스트 사용법" · 다음: 7편 "if 문"