본문 바로가기

클라우드(Cloud)

[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 9주차 - 파이썬 기초 2 (Python Basic 2)


 

 앞에서 파이썬(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) 리뷰로 작성 되었습니다.