5. 딕셔너리와 집합
딕셔너리와 집합은 파이썬에서 자주 사용되는 자료구조로, 데이터를 저장하고 관리하는 데 매우 유용합니다. 딕셔너리는 키-값 쌍으로 데이터를 저장하고, 집합은 중복되지 않는 고유한 값들의 모음을 관리합니다. 말이 어렵죠? 걱정 마세요. 아래의 사용 예시와 함께 딕셔너리와 집합의 사용 방법과 주요 특징을 쉽게 배워보겠습니다.
5.1 딕셔너리
딕셔너리는 데이터를 키-값 (key-value
) 쌍으로 저장하는 자료구조입니다. 딕셔너리는 중괄호 {}
로 정의되며, 각 항목은 키와 값이 콜론으로 구분됩니다. 키를 사용하여 값에 접근할 수 있으며, 키는 중복될 수 없습니다.
# 딕셔너리 생성 예제
student = {
"이름": "철수",
"나이": 15,
"학년": 1
}
print(student)
출력 결과:
{'이름': '철수', '나이': 15, '학년': 1}
5.1.1 딕셔너리의 주요 기능
-
값 접근하기 (
[]
)딕셔너리에서 특정 키의 값을 가져올 때는 대괄호
[]
를 사용합니다.name = student["이름"] print(name)
출력 결과:
철수
-
값 추가 및 수정하기
딕셔너리에 새로운 키-값 쌍을 추가하거나 기존 키의 값을 수정할 수 있습니다.
student["학교"] = "파이썬 중학교" student["나이"] = 16 print(student)
출력 결과:
{'이름': '철수', '나이': 16, '학년': 1, '학교': '파이썬 중학교'}
-
값 제거하기 (
del
)딕셔너리에서 특정 키-값 쌍을 제거할 때
del
키워드를 사용합니다.del student["학년"] print(student)
출력 결과:
{'이름': '철수', '나이': 16, '학교': '파이썬 중학교'}
-
모든 키와 값 돌아가며 출력하기 (
items()
)items()
함수를 사용하여 딕셔너리의 모든 키와 값을 접근할 수 있습니다.for key, value in student.items(): print(f"{key}: {value}")
출력 결과:
이름: 철수 나이: 16 학교: 파이썬 중학교
-
모든 키 가져오기 (
keys()
)keys()
함수를 사용하여 딕셔너리의 모든 키를 가져올 수 있습니다.keys = student.keys() print(keys)
출력 결과:
dict_keys(['이름', '나이', '학교'])
-
모든 값 가져오기 (
values()
)values()
함수를 사용하여 딕셔너리의 모든 값을 가져올 수 있습니다.values = student.values() print(values)
출력 결과:
dict_values(['철수', 16, '파이썬 중학교'])
5.1.2 딕셔너리 활용 예시
딕셔너리는 데이터베이스와 같은 구조화된 정보를 저장하거나 데이터를 처리할 때 매우 유용합니다.
# 전화번호부 예제
phonebook = {
"철수": "010-1234-5678",
"영희": "010-8765-4321",
"민수": "010-1357-2468"
}
print(phonebook["영희"])
출력 결과:
010-8765-4321
5.2 집합 (Set)
집합은 중복되지 않는 고유한 값들을 저장하는 자료구조입니다. 집합은 중괄호 {}
로 정의되며, 순서가 보장되지 않습니다. 집합은 수학적 집합 개념을 프로그래밍에서 사용할 때 유용합니다.
# 집합 생성 예제
numbers = {1, 2, 3, 4, 5}
print(numbers)
출력 결과:
{1, 2, 3, 4, 5}
5.2.1 집합의 주요 기능
-
항목 추가하기 (
add()
)집합에 새로운 항목을 추가할 때
add()
함수를 사용합니다. 중복된 값은 추가되지 않습니다.numbers.add(6) numbers.add(3) # 이미 존재하는 값은 추가되지 않음 print(numbers)
출력 결과:
{1, 2, 3, 4, 5, 6}
-
항목 제거하기 (
remove()
)집합에서 특정 항목을 제거할 때
remove()
함수를 사용합니다. 항목이 존재하지 않으면 오류가 발생합니다.numbers.remove(3) print(numbers)
출력 결과:
{1, 2, 4, 5, 6}
-
집합 연산 (합집합, 교집합, 차집합)
집합에서는 수학적 연산을 쉽게 수행할 수 있습니다.
- 합집합 (
union()
): 두 집합의 모든 항목을 포함합니다. - 교집합 (
intersection()
): 두 집합에 공통으로 포함된 항목만 포함합니다. - 차집합 (
difference()
): 첫 번째 집합에는 있지만 두 번째 집합에는 없는 항목만 포함합니다.
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set1.union(set2)) # {1, 2, 3, 4, 5, 6} print(set1.intersection(set2)) # {3, 4} print(set1.difference(set2)) # {1, 2}
- 합집합 (
-
부분 집합과 상위 집합 확인하기
집합이 다른 집합의 부분 집합인지 또는 상위 집합인지 확인할 수 있습니다.
set1 = {1, 2, 3} set2 = {1, 2, 3, 4, 5} print(set1.issubset(set2)) # True print(set2.issuperset(set1)) # True
5.2.2 집합 사용 예시
# 중복된 값 제거 예제
numbers_with_duplicates = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(numbers_with_duplicates)
print(unique_numbers)
출력 결과:
{1, 2, 3, 4, 5} # 중복 값이던 2와 4가 제거됨
집합은 데이터에 특정 값이 존재하는지 확인할 때도 주로 사용됩니다. 예를 들어, 오늘 출석한 사람들 중에 철수가 있는지 알고 싶다면:
# 출석 명단 체크 예제
attendance = {'영희', '철수', '민수', '지민', '수지', '지훈', '하늘', '지수', '준호', '유진', '현우', '서연', '도윤', '예은', '지우', '서준', '하윤', '민준', '서현', '예준', '지아', '하린', '지호', '서아', '도현', '수현', '은우', '다은', '시우', '유나', '지안', '하은'}
print('철수' in attendance) # True
print('하은' in attendance) # True
print('제니' in attendance) # False
5.3 딕셔너리와 집합의 차이점
특징 | 딕셔너리 (dict) | 집합 (set) |
---|---|---|
데이터 구조 | 키-값 쌍 (key-value pair) | 고유한 값들의 모음 |
중복 허용 | 키 중복 불가 | 중복 값 허용 안 됨 |
선언 방법 | 중괄호 {} 사용 | 중괄호 {} 사용 |
사용 예시 | 구조화된 데이터 저장 | 중복 제거, 집합 연산 |
5.4 예제: 학생의 과목 성적 관리하기
딕셔너리와 집합을 사용하여 학생의 과목 성적을 관리해 보겠습니다.
# 학생의 성적 저장 예제
grades = {
"철수": {"수학": 85, "영어": 90, "과학": 95},
"영희": {"수학": 92, "영어": 88, "과학": 89},
"제니": {"수학": 100, "영어": 100, "과학": 100}
}
# 모든 학생의 성적 출력
for student, subjects in grades.items():
print(f"{student}의 성적:")
for subject, score in subjects.items():
print(f" {subject}: {score}")
출력 결과:
철수의 성적:
수학: 85
영어: 90
과학: 95
영희의 성적:
수학: 92
영어: 88
과학: 89
제니의 성적:
수학: 100
영어: 100
과학: 100
5.5 요약
- 딕셔너리는 키-값 쌍으로 데이터를 저장하며, 키를 사용하여 값을 조회하거나 수정할 수 있습니다.
- 집합은 중복되지 않는 고유한 값들을 저장하며, 수학적 집합 연산을 쉽게 수행할 수 있습니다.
- 딕셔너리는 구조화된 데이터를 저장할 때, 집합은 중복 제거와 같은 작업에 유용하게 사용됩니다.
이번에 딕셔너리와 집합에 대해서 배웠으니 다음 챕터에서는 조건문을 배워보겠습니다.