딕셔너리 생성·조회·수정·삭제, .items()/.keys()/.values(), 집합(set) 연산
이번 강에서 배울 것
- 딕셔너리(Dictionary) — 키-값 쌍으로 저장하기
- 딕셔너리 CRUD — 생성·조회·수정·삭제
- 딕셔너리 메서드 — keys(), values(), items(), get()
- 딕셔너리 컴프리헨션
- 집합(Set) — 중복 없는 자료구조와 집합 연산
1. 딕셔너리란
딕셔너리(Dictionary)는 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 자료구조입니다. 국어사전에서 단어(키)로 뜻(값)을 찾는 것과 같습니다. 중괄호 {}를 사용하며, 파이썬 3.7+부터는 삽입 순서가 보장됩니다.
# 딕셔너리 생성
person = {
"name": "김민준",
"age": 28,
"city": "서울",
"skills": ["Python", "SQL", "React"] # 값으로 리스트 가능
}
# 값 조회 — 키로 접근
print(person["name"]) # → 김민준
print(person["age"]) # → 28
print(person["skills"]) # → ['Python', 'SQL', 'React']
# 키가 없으면 KeyError 발생
# print(person["email"]) # KeyError!
# get(): 키가 없을 때 None(또는 기본값) 반환 (안전한 방법)
print(person.get("email")) # → None
print(person.get("email", "없음")) # → 없음
# 키 존재 여부 확인
print("name" in person) # → True
print("email" in person) # → False
2. 딕셔너리 값 추가·수정·삭제
person = {"name": "김민준", "age": 28}
# 값 추가 (없는 키에 대입)
person["email"] = "minjun@email.com"
person["job"] = "개발자"
print(person)
# → {'name': '김민준', 'age': 28, 'email': '...', 'job': '개발자'}
# 값 수정 (있는 키에 대입)
person["age"] = 29
print(person["age"]) # → 29
# 값 삭제
del person["job"] # del 키워드로 삭제
removed = person.pop("email") # pop(): 삭제 후 값 반환
print(removed) # → minjun@email.com
# 안전하게 삭제 (키 없어도 에러 없음)
person.pop("없는키", None) # KeyError 없이 None 반환
# 전체 비우기
# person.clear()
# update(): 여러 키-값 한 번에 추가/수정
person.update({"age": 30, "city": "부산", "hobby": "독서"})
print(person)
3. 딕셔너리 순회 — keys(), values(), items()
grades = {"국어": 90, "수학": 85, "영어": 92, "과학": 88}
# keys(): 키만 가져오기
for subject in grades.keys():
print(subject, end=" ")
# → 국어 수학 영어 과학
# values(): 값만 가져오기
for score in grades.values():
print(score, end=" ")
# → 90 85 92 88
# items(): 키-값 쌍 가져오기 (가장 많이 사용)
for subject, score in grades.items():
print(f"{subject}: {score}점")
# → 국어: 90점
# → 수학: 85점
# → 영어: 92점
# → 과학: 88점
# 평균 계산
total = sum(grades.values())
avg = total / len(grades)
print(f"평균: {avg}점") # → 평균: 88.75점
# 리스트로 변환
subjects = list(grades.keys())
scores = list(grades.values())
print(subjects) # → ['국어', '수학', '영어', '과학']
4. 딕셔너리 컴프리헨션
# {키표현식: 값표현식 for 변수 in 반복대상}
squares = {x: x**2 for x in range(1, 6)}
print(squares)
# → {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 조건 포함
even_squares = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(even_squares)
# → {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
# 기존 딕셔너리 변환
grades = {"국어": 90, "수학": 85, "영어": 92}
letter = {sub: "A" if sc >= 90 else "B" for sub, sc in grades.items()}
print(letter)
# → {'국어': 'A', '수학': 'B', '영어': 'A'}
# 두 리스트를 딕셔너리로 합치기
keys = ["name", "age", "city"]
values = ["민준", 28, "서울"]
profile = dict(zip(keys, values))
print(profile) # → {'name': '민준', 'age': 28, 'city': '서울'}
5. 집합(Set)
집합(Set)은 중복 없는 값들의 모임입니다. 수학의 집합과 같이 합집합·교집합·차집합 연산을 지원합니다. 중괄호 {}를 사용하지만 빈 집합은 반드시 set()으로 생성해야 합니다({}는 빈 딕셔너리).
# 집합 생성 (중복 자동 제거)
nums = {1, 2, 3, 2, 1, 4}
print(nums) # → {1, 2, 3, 4} (순서 없음, 중복 제거됨)
# 리스트 중복 제거에 자주 활용
data = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(data))
print(unique) # → [1, 2, 3, 4]
# 집합 메서드
s = {1, 2, 3}
s.add(4) # 원소 추가
s.remove(2) # 삭제 (없으면 KeyError)
s.discard(99) # 삭제 (없어도 오류 없음)
print(len(s)) # → 3
# 집합 연산 (수학적 집합)
A = {1, 2, 3, 4, 5}
B = {3, 4, 5, 6, 7}
print(A | B) # → {1,2,3,4,5,6,7} 합집합 (union)
print(A & B) # → {3, 4, 5} 교집합 (intersection)
print(A - B) # → {1, 2} 차집합 (difference)
print(A ^ B) # → {1,2,6,7} 대칭차집합 (symmetric difference)
# 부분집합·초집합
C = {3, 4}
print(C.issubset(A)) # → True (C ⊆ A)
print(A.issuperset(C)) # → True (A ⊇ C)
# 실용 예시: 두 목록에서 공통 항목 찾기
python_users = {"Alice", "Bob", "Charlie", "Dave"}
java_users = {"Bob", "Dave", "Eve", "Frank"}
both_languages = python_users & java_users
print(both_languages) # → {'Bob', 'Dave'}
8강 핵심 요약
- 딕셔너리: {키: 값} 형태, 키로 값에 O(1) 접근 — 가장 유용한 자료구조
- get()으로 안전하게 조회 (KeyError 방지)
- items()로 키-값 동시 순회 — 가장 많이 사용되는 패턴
- 집합: 중복 제거, 합집합(|)·교집합(&)·차집합(-) 연산 지원
- 리스트 중복 제거: list(set(리스트))
- 다음 강: 파일 입출력과 예외 처리 — 실제 파일 읽고 쓰기
관련 검색어 · 파이썬딕셔너리, dict파이썬, 파이썬집합, set파이썬, items keys values, 딕셔너리컴프리헨션, 파이썬중복제거
Advertisement