어제 오늘 내일

[Python 기초] 6. "데이터에 이름표를 달아주자!" 파이썬 딕셔너리(Dictionary)와 집합(Set) 본문

IT/Python

[Python 기초] 6. "데이터에 이름표를 달아주자!" 파이썬 딕셔너리(Dictionary)와 집합(Set)

hi.anna 2026. 4. 9. 00:36

만약 한 사람의 정보를 리스트로 저장한다면 이렇게 될 것입니다. user = ["홍길동", 30, "010-1234-5678"].
나이를 꺼내려면 user[1]을 찾아야 하죠. 1번 방이 나이였다는 사실을 개발자가 매번 외우고 있어야 합니다. 너무 불편하지 않나요?

이럴 때 사용하는 것이 바로 파이썬의 꽃, 딕셔너리(Dictionary)입니다.


1. 딕셔너리(Dictionary): Key와 Value의 환상 짝꿍

딕셔너리는 말 그대로 '사전'입니다. 사전에서 단어(Key)를 찾으면 뜻(Value)이 나오는 것처럼, 파이썬 딕셔너리도 이름표(Key)실제 데이터(Value)가 한 쌍으로 묶여 있습니다.

만드는 방법은 중괄호 { }를 사용하며, 내부는 이름표 : 데이터 형태로 적어줍니다. 웹 개발에서 자주 쓰이는 JSON 포맷과 완전히 똑같이 생겼습니다.

📌 예제 코드: 딕셔너리 만들고 데이터 꺼내기

# 딕셔너리 생성 (중괄호 사용, Key: Value 형태)
user_info = {
    "name": "홍길동",
    "age": 30,
    "phone": "010-1234-5678"
}

# 1. 데이터 꺼내기 (대괄호 안에 인덱스 번호 대신 'Key 이름'을 넣습니다!)
print(user_info["name"])  # 출력: 홍길동
print(user_info["age"])   # 출력: 30

# 2. 안전하게 꺼내기 (.get() 함수 사용)
print(user_info.get("email")) # Key가 없으면 에러 대신 'None(없음)'을 반환합니다.
# print(user_info["email"])   # 이렇게 하면 KeyError가 발생하며 프로그램이 멈춥니다.

💡 코드 설명:

  • user_info[1]처럼 숫자로 찾는 것이 아니라, user_info["name"]처럼 직관적인 이름표로 데이터를 찾습니다. 코드를 읽기만 해도 무슨 데이터인지 바로 알 수 있죠!

2. 딕셔너리 요리하기: 추가, 수정, 삭제

딕셔너리도 리스트처럼 내용물을 자유롭게 바꿀 수 있습니다. 방법은 아주 직관적입니다.

📌 예제 코드: 딕셔너리 데이터 조작하기

my_dict = {"apple": "사과", "banana": "바나나"}

# 1. 새로운 데이터 추가하기 (없는 Key에 값을 넣으면 새로 생김)
my_dict["grape"] = "포도"
print(my_dict)  # 출력: {'apple': '사과', 'banana': '바나나', 'grape': '포도'}

# 2. 기존 데이터 수정하기 (있는 Key에 값을 넣으면 덮어쓰기 됨)
my_dict["apple"] = "꿀사과"
print(my_dict)  # 출력: {'apple': '꿀사과', 'banana': '바나나', 'grape': '포도'}

# 3. 데이터 삭제하기 (del 키워드 사용)
del my_dict["banana"]
print(my_dict)  # 출력: {'apple': '꿀사과', 'grape': '포도'}

3. 딕셔너리의 유용한 도구들 (keys, values, items)

딕셔너리 안에 어떤 이름표(Key)들이 있는지, 혹은 어떤 값(Value)들만 있는지 모아서 보고 싶을 때가 있습니다. 이때 아래 세 가지 함수를 사용합니다.

score_dict = {"국어": 90, "영어": 85, "수학": 100}

# 1. Key(과목명)만 다 모아줘!
print(score_dict.keys())    # 출력: dict_keys(['국어', '영어', '수학'])

# 2. Value(점수)만 다 모아줘!
print(score_dict.values())  # 출력: dict_values([90, 85, 100])

# 3. Key와 Value를 쌍으로 묶어서 다 모아줘!
print(score_dict.items())   
# 출력: dict_items([('국어', 90), ('영어', 85), ('수학', 100)])

(💡 참고: 이 함수들은 나중에 배울 for 반복문과 결합하면 엄청난 시너지를 발휘합니다.)


4. 집합(Set): 중복을 허락하지 않는 주머니

마지막으로 알아볼 자료형은 집합(Set)입니다. 딕셔너리와 똑같이 중괄호 { }를 쓰지만, Key: Value 쌍이 아니라 리스트처럼 값만 덩그러니 들어있습니다.

집합의 가장 강력한 특징 두 가지는 다음과 같습니다.

  1. 중복을 허용하지 않는다.
  2. 순서가 없다. (인덱싱 불가능)

📌 예제 코드: 리스트의 중복 데이터 1초 만에 날리기

집합은 언제 쓸까요? 바로 "수많은 데이터 중에서 중복을 제거할 때" 가장 많이 쓰입니다.

# 1. 중복이 잔뜩 있는 리스트
attendance_list = ["철수", "영희", "민수", "철수", "철수", "영희"]

# 2. 리스트를 집합(Set)으로 변환해 버립니다! (이때 중복이 마법처럼 사라짐)
unique_set = set(attendance_list)
print(unique_set)  # 출력: {'영희', '민수', '철수'} (순서는 뒤죽박죽일 수 있음)

# 3. 다시 다루기 편하게 리스트로 되돌려줍니다.
final_list = list(unique_set)
print(final_list)  # 출력: ['영희', '민수', '철수']

💡 수학 시간에 배운 교집합, 합집합도 가능합니다.

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

print(set1 & set2)  # 교집합 (공통으로 있는 것) -> {3, 4}
print(set1 | set2)  # 합집합 (전체 다 합친 것, 중복은 하나만) -> {1, 2, 3, 4, 5, 6}

📝 마치며

지금까지 배운 파이썬의 4대 데이터 바구니를 총정리해 보겠습니다.

  1. 리스트 `[ ]`: 순서가 있고, 중복도 허용하고, 내용물 수정도 가능. (가장 만만함)
  2. 튜플 `( )`: 리스트와 같지만, 내용물 수정이 절대 불가능. (안전함)
  3. 딕셔너리 `{Key: Value}`: 순서 대신 이름표(Key)로 값을 찾음. (직관적임)
  4. 집합 `{ }`: 순서가 없고, 중복을 제거해 줌. (필터 역할)

상황에 맞게 적절한 바구니를 고르는 것이 좋은 코드를 작성하는 첫걸음입니다!
재료 준비는 모두 끝났습니다. 이제 이 데이터들을 가지고 "비가 오면 우산을 쓰고, 안 오면 그냥 간다" 같은 조건을 만들어 컴퓨터에게 생각하는 법을 가르칠 차례입니다.
다음 포스팅에서는 "들여쓰기의 마법! 프로그램의 흐름을 통제하는 if문(조건문)"에 대해 알아보겠습니다.
도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍

반응형
Comments