10차시: 딕셔너리(Dictionary) 마스터하기

딕셔너리는 키(Key)와 값(Value)을 한 쌍으로 묶어 저장하는 매우 유용한 자료구조입니다. Python 3.7 버전부터는 입력한 순서가 유지되는 특성을 가집니다. 기초부터 심화까지 단계별 예제를 통해 딕셔너리를 완전히 정복해 봅시다.

1. 기초 파이썬 예시 코드 (5개)

딕셔너리의 기본적인 생성, 접근, 수정, 삭제 방법을 익힙니다.

1) 딕셔너리 생성 및 값 접근

# 학생 정보를 담은 딕셔너리를 생성하고 키를 이용해 값을 가져옵니다.

student = {
    "name": "홍길동",
    "id": 202301,
    "major": "컴퓨터공학"
}

# 'name' 키를 이용해 값에 접근
print(f"학생 이름: {student['name']}")

# get() 메서드 활용 (키가 없어도 오류 없이 기본값 반환 가능)
print(f"학생 학년: {student.get('grade', '정보 없음')}")

2) 새 키-값 쌍 추가 및 수정

# 비어있는 딕셔너리에 데이터를 추가하고 기존 값을 수정합니다.

person = {}

# 데이터 추가
person['name'] = '인수샘'
person['age'] = 30
print(f"추가 후: {person}")

# 기존 값 수정
person['age'] = 31
print(f"수정 후: {person}")

3) 딕셔너리 요소 삭제

# del 키워드와 pop() 메서드를 사용하여 요소를 삭제합니다.

car = {"brand": "현대", "model": "아이오닉", "year": 2024}

# 'year' 키와 해당 값 삭제
del car['year']
print(f"del 후: {car}")

# pop()을 사용하여 값을 꺼내오면서 삭제
model_name = car.pop('model')
print(f"삭제된 모델: {model_name}, 현재 딕셔너리: {car}")

4) 모든 키(Key)와 값(Value) 순회

# keys(), values(), items() 메서드를 활용하여 데이터를 확인합니다.

inventory = {"apple": 10, "banana": 5, "cherry": 20}

print(f"모든 품목: {list(inventory.keys())}")
print(f"모든 수량: {list(inventory.values())}")

# 키와 값을 동시에 순회
for item, count in inventory.items():
    print(f"{item}의 재고는 {count}개입니다.")

5) 딕셔너리 비우기 및 확인

# clear()로 내용을 삭제하고 'in' 키워드로 특정 키의 존재 여부를 확인합니다.

user = {"id": "user01", "status": "active"}

print("status 키가 있나요?", 'status' in user)

user.clear()
print(f"비운 후 결과: {user}")

2. 응용 파이썬 예시 코드 (4개)

실무에서 자주 쓰이는 딕셔너리 활용 기법을 다룹니다.

1) 딕셔너리 컴프리헨션

# 기존 리스트를 바탕으로 조건이 포함된 딕셔너리를 생성합니다.

users = ["인수샘", "홍길동", "구운몽"]
# 이름의 길이를 값으로 갖는 딕셔너리 생성
name_lengths = {name: len(name) for name in users}

print(f"이름 길이 정보: {name_lengths}")

2) 딕셔너리 정렬

# 값을 기준으로 딕셔너리를 정렬합니다.

scores = {"수학": 100, "영어": 80, "국어": 95, "과학": 85}

# 값을 기준으로 내림차순 정렬 (람다 함수 활용)
sorted_scores = sorted(scores.items(), key=lambda item: item[1], reverse=True)

print(f"점수 내림차순 정렬: {sorted_scores}")

3) 복잡한 데이터 구조화 (JSON 유사 구조)

# 딕셔너리와 리스트를 조합하여 복잡한 데이터를 표현합니다.

api_response = {
    "status": "success",
    "count": 2,
    "data": [
        {"id": 101, "name": "상품A", "tags": ["전자기기", "컴퓨터"]},
        {"id": 102, "name": "상품B", "tags": ["가구", "인테리어"]}
    ]
}

# 첫 번째 상품의 두 번째 태그 가져오기
first_product_second_tag = api_response["data"][0]["tags"][1]
print(f"첫 번째 상품의 두 번째 태그: {first_product_second_tag}")

4) setdefault() 메서드 활용

# 키가 없을 경우 기본값을 설정하고 바로 반환합니다. 데이터 그룹화에 유용합니다.

students = [('John', 'A'), ('Jane', 'B'), ('Dave', 'A'), ('Sarah', 'C')]
grades = {}

for name, grade in students:
    # 해당 성적(grade) 리스트가 없으면 빈 리스트를 만들고 이름을 추가
    grades.setdefault(grade, []).append(name)

print(f"성적별 학생 분류: {grades}")

3. 심화 파이썬 예시 코드 (1개)

1) 두 딕셔너리 병합 (Merge)

# Python 3.9 이상에서 사용 가능한 병합 연산자(|)를 소개합니다.

base_info = {"name": "구운몽", "age": 25}
extra_info = {"major": "국문학", "city": "서울"}

# 병합 연산자 | 사용
full_profile = base_info | extra_info
print(f"병합된 프로필: {full_profile}")

# 업데이트 연산자 |= 사용 (원본 수정)
base_info |= {"status": "졸업"}
print(f"업데이트된 원본: {base_info}")