Lesson 8

딕셔너리와 집합 — 키-값 자료구조

4 min Views 3

딕셔너리 생성·조회·수정·삭제, .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

0 Comments

채용정보
공지사항
인사이트
MY