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 요약

  • 딕셔너리는 키-값 쌍으로 데이터를 저장하며, 키를 사용하여 값을 조회하거나 수정할 수 있습니다.
  • 집합은 중복되지 않는 고유한 값들을 저장하며, 수학적 집합 연산을 쉽게 수행할 수 있습니다.
  • 딕셔너리는 구조화된 데이터를 저장할 때, 집합은 중복 제거와 같은 작업에 유용하게 사용됩니다.

이번에 딕셔너리와 집합에 대해서 배웠으니 다음 챕터에서는 조건문을 배워보겠습니다.