딕셔너리 (Dictionaries)
2025. 3. 26. 02:07ㆍProgramming Languages/Python
딕셔너리 (Dictionaries)
딕셔너리는 키(key)와 값(value)의 쌍으로 이루어진 자료구조입니다. 각 키는 유일해야 하며, 이를 통해 값을 빠르게 검색할 수 있습니다. 중괄호 {}를 사용하여 표현합니다.
딕셔너리 생성하기
# 빈 딕셔너리 생성
empty_dict = {}
empty_dict2 = dict()
# 값이 있는 딕셔너리 생성
student = {
"name": "김철수",
"age": 20,
"major": "컴퓨터공학",
"gpa": 3.8
}
# dict() 생성자로 딕셔너리 생성
person = dict(name="이영희", age=25, job="개발자")
# 리스트의 튜플 쌍으로 딕셔너리 생성
items = [("apple", 3), ("banana", 5), ("orange", 2)]
fruit_count = dict(items)
print(fruit_count) # {'apple': 3, 'banana': 5, 'orange': 2}
딕셔너리 항목 접근 및 수정
student = {
"name": "김철수",
"age": 20,
"major": "컴퓨터공학",
"gpa": 3.8
}
# 키를 사용하여 값에 접근
print(student["name"]) # 김철수
print(student["major"]) # 컴퓨터공학
# get() 메서드로 접근 (키가 없을 때 오류 대신 기본값 반환)
print(student.get("age")) # 20
print(student.get("address")) # None (기본값)
print(student.get("address", "주소 정보 없음")) # 주소 정보 없음 (지정된 기본값)
# 항목 수정
student["age"] = 21
print(student["age"]) # 21
# 새 항목 추가
student["address"] = "서울시 강남구"
print(student) # 'address': '서울시 강남구' 항목 추가됨
# 항목 삭제
del student["major"]
print(student) # 'major' 항목 삭제됨
# pop() 메서드로 항목 삭제 및 값 반환
gpa = student.pop("gpa")
print(gpa) # 3.8
print(student) # 'gpa' 항목 삭제됨
딕셔너리 키, 값, 항목 순회하기
student = {
"name": "김철수",
"age": 21,
"address": "서울시 강남구",
"courses": ["파이썬", "자료구조", "알고리즘"]
}
# 키 순회
print("== 키 목록 ==")
for key in student:
print(key)
# keys() 메서드로 키 순회
print("\n== keys() 사용 ==")
for key in student.keys():
print(key)
# 값 순회
print("\n== 값 목록 ==")
for value in student.values():
print(value)
# 키-값 쌍 순회
print("\n== 키-값 쌍 ==")
for key, value in student.items():
print(f"{key}: {value}")
# items() 메서드 사용
print("\n== items() 사용 ==")
for item in student.items():
print(f"{item[0]}: {item[1]}") # 각 item은 (key, value) 형태의 튜플
딕셔너리 메서드
딕셔너리에는 다양한 유용한 메서드가 있습니다.
# 기본 딕셔너리
student = {
"name": "김철수",
"age": 21,
"major": "컴퓨터공학"
}
# 딕셔너리 복사
student_copy = student.copy()
# 딕셔너리 비우기
student_copy.clear()
print(student_copy) # {}
# 여러 항목 업데이트
student.update({"gpa": 3.9, "age": 22, "phone": "010-1234-5678"})
print(student) # 항목 추가 및 기존 항목 수정됨
# 기본값과 함께 가져오기 (수정 없음)
phone = student.get("phone", "연락처 없음")
email = student.get("email", "이메일 없음")
print(phone) # 010-1234-5678
print(email) # 이메일 없음
# setdefault(): 키가 없을 때만 기본값 설정 및 반환
email = student.setdefault("email", "student@example.com")
print(email) # student@example.com (추가되고 반환됨)
print(student) # 'email': 'student@example.com' 항목 추가됨
# 키가 있는 경우 setdefault()는 기존 값 반환
name = student.setdefault("name", "홍길동")
print(name) # 김철수 (기존 값 반환, 수정되지 않음)
중첩 딕셔너리
딕셔너리는 다른 딕셔너리나 리스트 등을 포함할 수 있어 복잡한 데이터 구조를 표현할 수 있습니다.
# 학생 정보를 포함하는 복잡한 딕셔너리
university = {
"name": "서울대학교",
"departments": {
"컴퓨터공학": {
"professor": "이교수",
"students": 120,
"courses": ["프로그래밍기초", "자료구조", "알고리즘"]
},
"전자공학": {
"professor": "김교수",
"students": 130,
"courses": ["회로이론", "전자기학", "디지털회로"]
}
},
"founded": 1946,
"location": "서울시 관악구"
}
# 중첩 딕셔너리 접근하기
print(university["name"]) # 서울대학교
print(university["departments"]["컴퓨터공학"]["professor"]) # 이교수
print(university["departments"]["전자공학"]["courses"][1]) # 전자기학
# 중첩 딕셔너리 수정하기
university["departments"]["컴퓨터공학"]["students"] += 5 # 학생 수 증가
university["departments"]["전자공학"]["courses"].append("반도체공학") # 과목 추가
# 새 학과 추가
university["departments"]["기계공학"] = {
"professor": "박교수",
"students": 100,
"courses": ["역학", "열역학", "기계설계"]
}
# 중첩 딕셔너리 순회하기
print("\n== 학과 정보 ==")
for dept_name, dept_info in university["departments"].items():
print(f"\n{dept_name} 학과:")
print(f" 교수: {dept_info['professor']}")
print(f" 학생 수: {dept_info['students']}명")
print(f" 개설 과목: {', '.join(dept_info['courses'])}")
딕셔너리 컴프리헨션 (Dictionary Comprehension)
리스트 컴프리헨션과 유사하게, 딕셔너리 컴프리헨션을 사용하여 간결하게 딕셔너리를 생성할 수 있습니다.
# 기본 문법: {key_expr: value_expr for item in iterable}
# 1부터 5까지의 숫자의 제곱을 매핑하는 딕셔너리
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 문자열 리스트에서 길이를 매핑하는 딕셔너리
fruits = ["apple", "banana", "cherry", "date", "elderberry"]
fruit_lengths = {fruit: len(fruit) for fruit in fruits}
print(fruit_lengths) # {'apple': 5, 'banana': 6, 'cherry': 6, 'date': 4, 'elderberry': 11}
# 조건부 딕셔너리 컴프리헨션
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}
# 두 리스트를 결합하여 딕셔너리 생성
names = ["Alice", "Bob", "Charlie", "David"]
scores = [85, 92, 78, 95]
student_scores = {name: score for name, score in zip(names, scores)}
print(student_scores) # {'Alice': 85, 'Bob': 92, 'Charlie': 78, 'David': 95}
# 기존 딕셔너리 변환
original = {"a": 1, "b": 2, "c": 3}
inverted = {value: key for key, value in original.items()}
print(inverted) # {1: 'a', 2: 'b', 3: 'c'}
'Programming Languages > Python' 카테고리의 다른 글
| collections 모듈의 특수 컬렉션 (0) | 2025.03.26 |
|---|---|
| 집합 (Sets) (1) | 2025.03.26 |
| 시퀀스 타입의 공통 연산 (0) | 2025.03.25 |
| 튜플 (Tuples) (0) | 2025.03.25 |
| 파이썬의 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) (1) | 2025.03.25 |