Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료

Topic 4: 딕셔너리 - 키-값 쌍의 데이터 관리 🗂️

🎯 학습 목표

딕셔너리의 구조와 특징을 이해하고, 키-값 쌍을 이용해 데이터를 효율적으로 저장, 조회, 관리하는 방법을 익힐 수 있습니다.

🗂️ 딕셔너리란?

일상생활의 사전

실제 사전을 생각해보세요:

  • 단어(키): “사과”
  • 뜻(값): “장미과의 과일”

프로그래밍의 딕셔너리도 마찬가지로 **키(Key)**와 **값(Value)**의 쌍으로 이루어져 있습니다.

# 사전 같은 구조 student = { "이름": "김철수", "나이": 20, "전공": "컴퓨터공학" }

딕셔너리의 특징

  1. 키-값 쌍: 각 데이터는 키와 값으로 구성
  2. 키의 유일성: 같은 키는 하나만 존재
  3. 빠른 조회: 키로 값을 즉시 찾을 수 있음
  4. 순서 보장: Python 3.7+ 부터 입력 순서 유지

🏗️ 딕셔너리 생성

기본 생성 방법

# 중괄호 사용 student = { "name": "김철수", "age": 20, "major": "컴퓨터공학" } # 빈 딕셔너리 empty_dict = {} # dict() 함수 사용 person = dict(name="이영희", age=25, job="개발자")

다양한 타입의 키와 값

# 다양한 타입 혼합 mixed_dict = { "이름": "김철수", # 문자열 키 1: "첫 번째", # 숫자 키 (2, 3): "좌표", # 튜플 키 "점수": [90, 85, 92] # 리스트 값 }

🔍 딕셔너리 접근과 수정

값 조회

student = { "name": "김철수", "age": 20, "major": "컴퓨터공학" } # 대괄호로 접근 print(student["name"]) # 김철수 print(student["age"]) # 20 # get() 메서드로 안전하게 접근 print(student.get("name")) # 김철수 print(student.get("phone", "없음")) # 없음 (기본값 반환)

값 수정과 추가

student = { "name": "김철수", "age": 20 } # 기존 값 수정 student["age"] = 21 # 새로운 키-값 추가 student["major"] = "컴퓨터공학" student["phone"] = "010-1234-5678" print(student) # {'name': '김철수', 'age': 21, 'major': '컴퓨터공학', 'phone': '010-1234-5678'}

값 삭제

student = { "name": "김철수", "age": 20, "major": "컴퓨터공학" } # del 키워드로 삭제 del student["major"] # pop() 메서드로 삭제 (값 반환) age = student.pop("age") print(f"삭제된 나이: {age}") # 삭제된 나이: 20 print(student) # {'name': '김철수'}

🛠️ 딕셔너리 메서드

주요 메서드들

student = { "name": "김철수", "age": 20, "major": "컴퓨터공학" } # 모든 키 조회 print(student.keys()) # dict_keys(['name', 'age', 'major']) # 모든 값 조회 print(student.values()) # dict_values(['김철수', 20, '컴퓨터공학']) # 모든 키-값 쌍 조회 print(student.items()) # dict_items([('name', '김철수'), ('age', 20), ('major', '컴퓨터공학')]) # 키 존재 여부 확인 print("name" in student) # True print("phone" in student) # False

딕셔너리 업데이트

student = {"name": "김철수", "age": 20} additional_info = {"major": "컴퓨터공학", "phone": "010-1234-5678"} # 다른 딕셔너리로 업데이트 student.update(additional_info) print(student) # {'name': '김철수', 'age': 20, 'major': '컴퓨터공학', 'phone': '010-1234-5678'}

🔄 딕셔너리 순회

키로 순회

scores = { "수학": 90, "영어": 85, "과학": 92 } # 키만 순회 for subject in scores: print(f"{subject}: {scores[subject]}") # 명시적으로 keys() 사용 for subject in scores.keys(): print(f"{subject}: {scores[subject]}")

값으로 순회

scores = { "수학": 90, "영어": 85, "과학": 92 } # 값만 순회 for score in scores.values(): print(f"점수: {score}")

키-값 쌍으로 순회

scores = { "수학": 90, "영어": 85, "과학": 92 } # 키-값 쌍 순회 for subject, score in scores.items(): print(f"{subject}: {score}점")

📊 실용적인 활용 예시

예시 1: 학생 성적 관리

# 학생별 성적 딕셔너리 student_scores = { "김철수": 85, "이영희": 92, "박민수": 78, "최지영": 96 } print("📊 학생 성적:") for name, score in student_scores.items(): print(f"{name}: {score}점") # 성적 통계 scores = student_scores.values() average = sum(scores) / len(scores) highest = max(scores) lowest = min(scores) print(f"\n📈 성적 통계:") print(f"평균: {average:.1f}점") print(f"최고점: {highest}점") print(f"최저점: {lowest}점")

예시 2: 단어 빈도 분석

text = "python is great python is fun python is powerful" words = text.split() # 단어 빈도 계산 word_count = {} for word in words: if word in word_count: word_count[word] += 1 else: word_count[word] = 1 # 또는 get() 메서드 사용 word_count = {} for word in words: word_count[word] = word_count.get(word, 0) + 1 # 결과 출력 print("📊 단어 빈도 분석:") for word, count in word_count.items(): print(f"{word}: {count}번")

예시 3: 카페 메뉴 관리

# 카페 메뉴 (음료와 가격) menu = { "아메리카노": 4000, "카페라떼": 4500, "카푸치노": 5000, "주스": 3500, "케이크": 6000 } print("☕ 카페 메뉴") for drink, price in menu.items(): print(f"{drink}: {price:,}원") # 가격 검색 item_name = "아메리카노" if item_name in menu: price = menu[item_name] print(f"\n{item_name} 가격: {price:,}원") else: print(f"{item_name}는 메뉴에 없습니다.") # 메뉴 개수 print(f"\n총 메뉴 개수: {len(menu)}개")

🔄 딕셔너리 조작 심화

딕셔너리 합치기

# 두 딕셔너리 합치기 dict1 = {"a": 1, "b": 2} dict2 = {"c": 3, "d": 4} # update() 메서드 사용 dict1.update(dict2) print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4} # 새로운 딕셔너리 생성 dict3 = {"e": 5, "f": 6} combined = {**dict1, **dict3} print(combined) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}

딕셔너리 값 변환

# 기존 딕셔너리 scores = {"수학": 80, "영어": 90, "과학": 85} # 모든 점수에 5점 추가 for subject in scores: scores[subject] += 5 print(scores) # {'수학': 85, '영어': 95, '과학': 90}

🎯 딕셔너리 안에 딕셔너리

학생 과목별 성적 관리

# 학생별 과목 성적 student_grades = { "김철수": {"수학": 90, "영어": 85}, "이영희": {"수학": 95, "영어": 88}, "박민수": {"수학": 78, "영어": 92} } # 특정 학생의 성적 확인 student_name = "김철수" print(f"{student_name}의 성적:") for subject, score in student_grades[student_name].items(): print(f" {subject}: {score}점") # 수학 점수만 확인 print(f"\n수학 성적:") for name, grades in student_grades.items(): math_score = grades["수학"] print(f"{name}: {math_score}점")

🚨 자주 발생하는 오류

오류 1: 존재하지 않는 키 접근

# ❌ 틀린 예 student = {"name": "김철수", "age": 20} print(student["phone"]) # KeyError: 'phone' # ✅ 올바른 예 student = {"name": "김철수", "age": 20} phone = student.get("phone", "정보 없음") print(phone) # 정보 없음 # 또는 in 연산자로 확인 if "phone" in student: print(student["phone"]) else: print("전화번호 정보가 없습니다.")

오류 2: 불변 객체가 아닌 키 사용

# ❌ 틀린 예 # my_dict = {[1, 2]: "리스트"} # TypeError: unhashable type: 'list' # ✅ 올바른 예 my_dict = {(1, 2): "튜플"} # 튜플은 불변 객체이므로 키로 사용 가능 print(my_dict[(1, 2)]) # 튜플

💡 퀴즈: 딕셔너리 이해도 체크

Q1. 다음 코드의 출력 결과는?

d = {"a": 1, "b": 2} d["c"] = 3 d["a"] = 10 print(len(d))
  1. 2
  2. 3
  3. 4
  4. 오류 발생

💡 정답 확인

정답: 2번 (3)

딕셔너리 d는 키 “a”, “b”, “c”를 가지므로 길이는 3입니다.

Q2. 딕셔너리에서 안전하게 값을 조회하는 방법은?

  1. dict[key]
  2. dict.get(key)
  3. dict.get(key, default)
  4. 2번과 3번 모두

💡 정답 확인

정답: 4번 (2번과 3번 모두)

get() 메서드는 키가 없을 때 KeyError를 발생시키지 않고, 기본값을 설정할 수도 있습니다.

Q3. 딕셔너리의 모든 키-값 쌍을 순회하는 방법은?

  1. for k, v in dict.items():
  2. for k in dict.keys():
  3. for v in dict.values():
  4. for item in dict:

💡 정답 확인

정답: 1번 (for k, v in dict.items():)

items() 메서드를 사용하면 키-값 쌍을 함께 순회할 수 있습니다.

✅ 딕셔너리 마스터 체크리스트

✅ 딕셔너리 마스터 체크리스트

🎉 Unit 4 완주!

딕셔너리까지 학습하면서 자료구조의 모든 기본기를 완성했습니다!

🏆 Unit 4에서 배운 내용

  1. 리스트: 순서가 있는 변경 가능한 데이터 모음
  2. 리스트 메서드: 데이터 추가, 삭제, 정렬, 검색
  3. 튜플: 순서가 있는 변경 불가능한 데이터 모음
  4. 딕셔너리: 키-값 쌍으로 관리하는 데이터 모음

🚀 이제 할 수 있는 것들

  • 다양한 형태의 데이터를 적절한 자료구조로 관리
  • 효율적인 데이터 저장과 조회
  • 복잡한 데이터 구조를 설계하고 활용
  • 실제 프로그램에서 자료구조를 적절히 선택하여 사용

축하합니다! 이제 파이썬의 핵심 자료구조를 모두 마스터했습니다! 🎊

이제 여러분은 다양한 데이터를 효율적으로 관리하고 조작할 수 있는 강력한 도구들을 갖추었습니다. 이 자료구조들을 조합하여 더 복잡하고 실용적인 프로그램을 만들어보세요!

Last updated on