파이썬 데이터 정리 끝판왕 - 딕셔너리와 세트, 완벽 정복 가이드
파이썬의 세계에 오신 것을 환영합니다.
만약 여러분이 리스트(List)와 튜플(Tuple)이라는 데이터 보관함을 이미 경험했다면, 이제는 데이터를 훨씬 더 똑똑하고 유용하게 다룰 수 있는 새로운 도구를 만날 시간입니다.
바로 딕셔너리(Dictionary)와 세트(Set)인데요.
이 두 가지는 단순히 값을 나열하는 것을 넘어, 데이터에 의미를 부여하고 관계를 만들어주는 아주 강력한 자료구조입니다.
이 둘의 차이점과 사용법을 제대로 이해한다면, 여러분의 파이썬 코드는 이전과는 비교할 수 없을 정도로 깔끔하고 효율적으로 변할 것입니다.
자, 그럼 파이썬의 진짜 실력자가 되기 위한 다음 단계로 함께 나아가 볼까요.
1. 파이썬의 만능 서랍장, 딕셔너리(Dictionary)
딕셔너리는 이름 그대로 '사전'과 매우 비슷합니다.
사전에서 '사과'라는 단어(Key)를 찾으면 '둥글고 붉은 과일'이라는 뜻(Value)이 나오는 것처럼, 딕셔너리도 '키(Key)'와 '값(Value)'이 하나의 쌍으로 묶여 데이터를 저장합니다.
마치 이름표가 정성껏 붙어있는 서랍장이라고 생각하면 이해하기 쉬운데요.
'이름'이라는 서랍을 열면 '홍길동'이 나오고, '나이'라는 서랍을 열면 '20'이 나오는 식입니다.
딕셔너리의 핵심 특징
딕셔너리를 제대로 사용하기 위해선 몇 가지 중요한 특징을 알아야 합니다.
- 순서가 있습니다: 최신 파이썬에서는 데이터를 추가한 순서가 그대로 유지됩니다.
- 수정할 수 있습니다: 언제든지 새로운 키-값 쌍을 추가하거나, 기존 값을 바꿀 수 있습니다.
- 키는 중복될 수 없습니다: 이름표가 같은 서랍이 두 개일 수는 없겠죠.
만약 똑같은 키로 새로운 값을 넣으면, 이전 값은 덮어쓰기 됩니다. - 인덱스가 아닌 키로 접근합니다: 리스트처럼
[0]
,[1]
같은 숫자 순서가 아니라,['이름']
처럼 우리가 직접 지정한 고유한 키로 데이터에 접근합니다.
딕셔너리, 그래서 언제 어떻게 사용할까요.
딕셔너리는 서로 연관된 여러 정보를 하나의 묶음으로 관리할 때 정말 유용합니다.
예를 들어, 한 사람의 프로필 정보나, 게임 캐릭터의 능력치, 웹사이트의 회원 정보처럼 각 데이터에 명확한 이름표가 필요할 때 안성맞춤입니다.
딕셔너리를 만드는 방법은 중괄호{}
를 사용하는 것입니다.
아래 예제를 통해 딕셔너리를 어떻게 만들고 활용하는지 직접 보겠습니다.
# 'character_info'라는 이름의 딕셔너리를 만듭니다.
# 키(Key)와 값(Value)은 콜론(:)으로 연결합니다.
character_info = {
'name': '전사',
'level': 15,
'items': ['철검', '가죽 갑옷']
}
# 1. 값 꺼내보기 (키를 이용해 접근)
# 'level'이라는 키를 사용해 값을 출력합니다.
print(f"캐릭터의 레벨: {character_info['level']}") # 결과: 캐릭터의 레벨: 15
# 2. 새로운 정보 추가하기
# 'job'이라는 새로운 키와 '기사'라는 값을 추가합니다.
character_info['job'] = '기사'
print(f"추가 후 정보: {character_info}")
# 결과: 추가 후 정보: {'name': '전사', 'level': 15, 'items': ['철검', '가죽 갑옷'], 'job': '기사'}
# 3. 기존 정보 수정하기
# 'level' 키의 값을 16으로 변경합니다.
character_info['level'] = 16
print(f"레벨업 후 정보: {character_info}")
# 결과: 레벨업 후 정보: {'name': '전사', 'level': 16, 'items': ['철검', '가죽 갑옷'], 'job': '기사'}
# 4. 정보 삭제하기
# 'items'라는 키와 그 값을 통째로 삭제합니다.
del character_info['items']
print(f"삭제 후 정보: {character_info}")
# 결과: 삭제 후 정보: {'name': '전사', 'level': 16, 'job': '기사'}
이처럼 키만 알고 있다면 데이터를 찾고, 추가하고, 수정하고, 삭제하는 모든 작업이 아주 직관적이고 편리합니다.
"딕셔너리의 키는 값을 여는 열쇠다" 이 문장을 꼭 기억해주십시오.
2. 중복은 거절한다! 특별한 주머니, 세트(Set)
세트는 이름 그대로 수학의 '집합'과 똑같은 특징을 가집니다.
세트를 설명하는 가장 중요하고 강력한 한 문장은 바로 '중복된 값을 절대로 허용하지 않는다'는 것입니다.
만약 똑같은 값을 백 번 넣어도, 세트 안에는 오직 단 하나의 값만 남습니다.
마치 마법의 주머니 같아서, 같은 모양의 구슬을 아무리 넣어도 주머니 속에는 종류별로 하나씩만 들어있는 것과 같습니다.
세트의 핵심 특징
- 중복이 없습니다: 세트의 존재 이유이자 가장 큰 특징입니다.
- 순서가 없습니다: 딕셔너리와 달리, 세트는 데이터의 순서를 보장하지 않습니다.
그래서 인덱스[0]
와 같은 접근이 불가능합니다. - 항목을 바꿀 수는 없지만, 추가/삭제는 가능합니다: 세트 안에 있는 '5'라는 값을 '6'으로 바꿀 수는 없지만, '7'이라는 새로운 값을 추가하거나 기존의 '5'를 삭제하는 것은 가능합니다.
세트의 진짜 능력: 중복 제거와 비교 연산
그렇다면 이 독특한 세트는 언제 사용해야 할까요.
첫째, 데이터에서 중복된 항목을 아주 손쉽게 제거하고 싶을 때 최고의 선택입니다.
둘째, 여러 데이터 그룹을 서로 비교하여 공통점이 무엇인지, 차이점이 무엇인지 찾아낼 때 강력한 힘을 발휘합니다.
마치 벤다이어그램을 코드로 옮겨놓은 것과 같습니다.
아래 예제는 두 개의 동아리 회원 명단을 세트로 만들어 비교하는 상황입니다.
# 두 개의 동아리 회원 명단이 있습니다. '영희'와 '지민'은 두 곳 모두에 있습니다.
music_club = {'민수', '철수', '영희', '지민'}
art_club = {'영희', '지민', '현우', '서준'}
# 능력 1: 합집합 (두 동아리의 모든 회원을 중복 없이 보여주기)
# union 메소드 또는 | 연산자를 사용합니다.
all_members = music_club.union(art_club)
print(f"전체 회원 명단: {all_members}")
# 결과: 전체 회원 명단: {'민수', '철수', '서준', '영희', '현우', '지민'} (순서는 다를 수 있습니다)
# 능력 2: 교집합 (두 동아리에 모두 가입한 회원 찾기)
# intersection 메소드 또는 & 연산자를 사용합니다.
common_members = music_club.intersection(art_club)
print(f"두 동아리 모두 활동하는 회원: {common_members}")
# 결과: 두 동아리 모두 활동하는 회원: {'영희', '지민'}
# 능력 3: 차집합 (음악 동아리에만 있는 순수 회원 찾기)
# difference 메소드 또는 - 연산자를 사용합니다.
only_music_club = music_club.difference(art_club)
print(f"음악 동아리에만 있는 회원: {only_music_club}")
# 결과: 음악 동아리에만 있는 회원: {'철수', '민수'}
보시는 것처럼, 복잡한 반복문 없이도 단 한 줄의 코드로 두 그룹 간의 관계를 명확하게 파악할 수 있습니다.
이것이 바로 세트가 가진 진짜 힘입니다.
최종 정리: 그래서 언제 무엇을 써야 할까요?
이제 딕셔너리와 세트의 차이점이 명확해졌습니까.
마지막으로 언제 어떤 것을 선택해야 할지 간단하게 정리해 보겠습니다.
-
딕셔너리(Dictionary)를 써야 할 때:
- 데이터에 '이름', '나이', '레벨'처럼 명확한 이름표(Key)를 붙여서 관리하고 싶을 때
- 데이터의 순서가 중요하고, 키를 통해 빠르게 값을 찾아야 할 때 (예: 회원 정보, 설정 값)
-
세트(Set)를 써야 할 때:
- 데이터 묶음에서 중복을 완벽하게 제거하고 싶을 때
- 데이터의 순서는 중요하지 않고, 오직 값의 존재 여부만 궁금할 때
- 두 개 이상의 데이터 그룹을 합치거나, 공통점이나 차이점을 비교하고 싶을 때 (예: 참가자 명단 비교, 추천 항목 필터링)
이 두 가지 강력한 자료구조를 자유자재로 사용할 수 있다면, 여러분의 파이썬 코드는 훨씬 더 깔끔하고, 읽기 쉽고, 강력해질 것입니다.
이제 직접 코드를 작성하며 딕셔너리의 서랍장을 채워보고, 세트의 마법 주머니를 사용해볼 시간입니다.