앞에서 파이썬(Python)의 기초 개념들을 변수부터 튜플까지 정리하며 학습해보았다. 그리고 오늘은 파이썬(Python)의 기초 개념 중 딕셔너리와 집합에 대한 내용을 더 학습해보려 한다. 앞으로 딕셔너리(Dictionary)부터 집합(Set)을 포함해 조건문, 반복문, 연산자들 등의 여러 개념을 학습할 예정이다. 개념들과 짧은 예시 코드들로 학습한 후에 마지막의 예시 코드를 통해 확실하게 정리하도록 했다.
✅ 딕셔너리(Dictionary)
1️⃣ 딕셔너리란?
키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료형으로, 순서를 포함하고 있으며, 중복된 키는 허용하지 않는 특징이 있다.
person = { "name": "홍길동", "age": 25, "city": "서울" } # {} 중괄호로 선언
2️⃣ 기본 동작
✅ 값 조회
print(person["name"]) # 홍길동
✅ 값 변경
person["age"] = 30
✅ 새로운 키-값 추가
person["email"] = "hong@example.com"
✅ 키 삭제
del person["city"]
3️⃣ 딕셔너리 메서드
메서드 | 설명 | 예시 |
dict.keys() | 키 목록 반환 | person.keys() |
dict.values() | 값 목록 반환 | person.values() |
dict.items() | (키, 값) 튜플 리스트 반환 | person.items() |
dict.get(key) | 키의 값을 안전하게 가져오기 | person.get("name") |
dict.pop(key) | 키 삭제 + 값 반환 | person.pop("age") |
dict.clear() | 모든 항목 삭제 | person.clear() |
4️⃣ 딕셔너리 특징
항목 | 설명 |
키는 고유해야 함 | 중복 ❌, 새로 넣으면 기존 값 덮어씀 |
키는 불변(immutable) 타입만 사용 가능 | 문자열, 숫자, 튜플(불변한 경우) |
값은 모든 타입 가능 | 숫자, 리스트, 다른 딕셔너리 등 자유 |
# ❌ 리스트는 키로 쓸 수 없음
# d = {[1, 2]: "hello"} # TypeError
# ✅ 튜플은 가능
d = {(1, 2): "hello"}
5️⃣ 딕셔너리 반복
for key in person:
print(key, person[key])
# 혹은
for k, v in person.items():
print(f"{k} → {v}")
6️⃣ 딕셔너리 예시
✅ JSON 구조와 유사 → 웹 개발, API, DB 모두 딕셔너리 기반
user = {
"id": "user01",
"profile": {
"name": "홍길동",
"email": "hong@example.com"
},
"tags": ["python", "dev", "data"]
}
✅ 학생 성적 관리 시스템
scores = {
"홍길동": 95,
"김철수": 88,
"이영희": 76
}
print(scores["김철수"]) # 88
✅ 조건문과 함께
if "이영희" in scores:
print("이영희 성적:", scores["이영희"])
7️⃣ 중첩 딕셔너리
contacts = {
"홍길동": {
"전화": "010-1234-5678",
"이메일": "hong@example.com",
"주소": "서울"
},
"김철수": {
"전화": "010-2222-3333",
"이메일": "kim@example.com",
"주소": "부산"
}
}
print(contacts["홍길동"]["전화"]) # 010-1234-5678
8️⃣ 딕셔너리 vs JSON
항목 | 딕셔너리 | JSON |
키 타입 | 문자열, 숫자, 튜플 등 | 문자열만 가능 |
값 타입 | 모든 타입 가능 | 제한 있음 |
주석 | 가능 | 불가능 |
함수 저장 | 가능 | 불가능 |
import json
# JSON → 딕셔너리로 변환
data = '{"name": "홍길동", "age": 25}'
d = json.loads(data) # 문자열 → 딕셔너리
print(d["name"]) # 홍길동
⚙️ 요약 정리
항목 | 설명 |
정의 | 키-값 쌍으로 데이터를 저장하는 자료형 |
표기 | { "key": value } |
키 | 고유하고 불변 타입만 가능 (str, int, tuple 등) |
값 | 어떤 타입이든 가능 (list, dict 포함) |
주요 메서드 | get, pop, keys, items, clear 등 |
반복 | for key in dict, for k, v in dict.items() |
활용 예시 | JSON, 사용자 데이터, 통계 자료, 중첩 구조 등 |
중첩 가능 | 딕셔너리 안에 또 다른 딕셔너리 가능 |
✅ 집합(Set)
1️⃣ 집합(Set)이란?
중복이 없고, 순서도 존재하지 않는 자료형으로, 수학적 집합의 개념과 동일하다. 또한, 리스트와 딕셔너리처럼 변경이 가능하다는 특징을 가지고 있다.
주의할 점은 {}으로 집합을 생성하는 부분에서 딕셔너리(Dictionary)와 헷갈리면 안된다는 점이다.
s = {1, 2, 3, 3, 2} # {} 또는 set()으로 생성할 수 있음
print(s) # {1, 2, 3}
👉 딕셔너리(Dictionary)와 집합(Set)의 생성 시 구분에 신경써야 함.
1) 중괄호({}) 안에 key:value의 값이 있으면 → 딕셔너리(Dictionary)
2) 중괄호({}) 안에 쉼표로 구분한 값들이 있으면 → 집합(Set)
3) 중괄호({}) 안이 비어있다면 → 딕셔너리(Dictionary)
2️⃣ 집합 생성법
a = {1, 2, 3} # 중괄호 사용
b = set([3, 4, 5]) # 리스트 → 집합 변환
c = set("hello") # 문자열 → 집합 {'e', 'h', 'l', 'o'}
empty_set = set() # 빈 집합 생성 (❌ {}는 딕셔너리)
3️⃣ 집합의 핵심 특징
항목 | 설명 |
✅ 중복 ❌ | 한 번만 저장됨 |
✅ 순서 ❌ | 인덱싱 불가능 |
✅ 변경 가능 | 요소 추가/삭제 가능 |
✅ 저장 가능한 타입 | 불변형(immutable)만 가능 (숫자, 문자열, 튜플 등) |
s = {1, (2, 3)} # OK
# s = {1, [2, 3]} ❌ → TypeError (리스트는 가변 타입이라 안됨)
4️⃣ 집합 연산 (기호 연산자와 메서드)
연산 종류 | 기호 | 메서드 | 설명 |
합집합 | | | .union() | 합한 후 중복되는 요소 제거 |
교집합 | & | .intersection() | 공통 원소만 |
차집합 | - | .difference() | 왼쪽에만 있는 원소 |
대칭차집합 | ^ | .symmetric_difference() | 한쪽에만 있는 원소 |
예시:
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # {1, 2, 3, 4, 5, 6}
print(A & B) # {3, 4}
print(A - B) # {1, 2}
print(B - A) # {5, 6}
print(A ^ B) # {1, 2, 5, 6}
5️⃣ 부분집합 / 상위집합
연산 | 메서드 | 설명 |
A <= B | A.issubset(B) | A가 B의 부분집합인지 |
A >= B | A.issuperset(B) | A가 B의 상위집합인지 |
A = {1, 2}
B = {1, 2, 3}
print(A <= B) # True
print(B >= A) # True
6️⃣ 요소 추가 및 삭제
메서드 | 설명 |
add(x) | x를 추가 |
update([x, y]) | 여러 개 추가 |
remove(x) | x 제거 (없으면 오류 발생) |
discard(x) | x 제거 (없어도 오류 없음) |
pop() | 아무 요소나 꺼내고 제거 |
clear() | 모든 요소 삭제 |
s = {1, 2}
s.add(3) # {1, 2, 3}
s.update([4, 5]) # {1, 2, 3, 4, 5}
s.remove(2) # {1, 3, 4, 5}
s.discard(10) # 오류 없음
8️⃣ 불변 집합: frozenset
수정이 불가능한 집합으로, 딕셔너리의 키나 set 안의 원소로 사용할 때 유용하게 사용할 수 있다. 그동안에 사용한 적이 그렇게 있지는 않았지만 상황이 맞으면 유용하게 사용할 수 있을 것 같다.
fs = frozenset([1, 2, 3])
# fs.add(4) ❌ AttributeError 발생 (수정 불가)
⚙️ 요약
항목 | 설명 |
정의 | 중복 없는, 순서 없는 컬렉션 자료형 |
생성 | {1, 2, 3}, set(), frozenset() |
주요 연산 | ` |
부분/상위집합 | <=, >=, .issubset(), .issuperset() |
완전 배타 확인 | .isdisjoint() |
요소 조작 | add, remove, discard, update, pop, clear |
실전 용도 | 중복 제거, 관심사 비교, 조건 필터링 |
주의 | 순서 없음, 인덱싱 ❌, 불변 객체만 저장 가능 |
이번 글에서는 딕셔너리와 집합의 내용에 대해 정리하며 학습해보았다. 위 내용에 포함해 적어두었지만 딕셔너리와 집합을 생성할 때, 특히 빈 딕셔너리와 집합을 생성하는 경우에 헷갈리지 않도록 구분해 생성해야 하는 것을 다시 생각할 수 있었다. 다음 글에서는 연산자를 포함해 반복문과 조건문들을 학습할 예정이다.
본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.
'클라우드(Cloud)' 카테고리의 다른 글
[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 9주차 - 파이썬 심화 1 (Python Advanced 1) (1) | 2025.05.22 |
---|---|
[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 9주차 - 파이썬 기초 3 (Python Basic 3) (0) | 2025.05.21 |
[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 9주차 - 파이썬 기초 1 (Python Basic 1) (1) | 2025.05.21 |
[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 8주차 - 리액트 2 (React 2) (0) | 2025.05.20 |
[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 8주차 - 리액트 1 (React 1) (0) | 2025.05.20 |