파이썬 딕셔너리와 집합 set은 여러 값을 다룰 때 사용하는 자료형입니다. 딕셔너리는 이름과 값을 짝으로 저장하고, 집합은 중복 없는 값을 모아둘 때 사용합니다.
이전 글에서 리스트와 튜플을 다뤘습니다. 리스트와 튜플은 여러 값을 순서대로 저장하는 자료형입니다.
fruits = ["사과", "바나나", "딸기"]
print(fruits[0])
실행 결과는 다음과 같습니다.
사과
그런데 모든 데이터를 위치로만 다루면 불편한 경우가 있습니다.
user = ["철수", 20, "서울"]
이렇게 저장하면 user[0]이 이름이고, user[1]이 나이이며, user[2]가 지역이라는 사실을 따로 기억해야 합니다.
데이터가 많아질수록 헷갈리기 쉽습니다. 이럴 때 사용하는 자료형이 딕셔너리(dictionary) 입니다.
user = {
"name": "철수",
"age": 20,
"city": "서울"
}
딕셔너리를 사용하면 값에 이름표를 붙여서 관리할 수 있습니다.
딕셔너리는 key와 value를 저장하는 자료형이다
딕셔너리는 key와 value를 한 쌍으로 저장합니다.
user = {
"name": "철수",
"age": 20,
"city": "서울"
}
위 코드에서 "name", "age", "city"는 key입니다."철수", 20, "서울"은 value입니다.
| key | value |
|---|---|
| name | 철수 |
| age | 20 |
| city | 서울 |
딕셔너리는 리스트처럼 위치 번호로 값을 꺼내기보다, key를 사용해서 값을 꺼냅니다.
print(user["name"])
print(user["age"])
실행 결과는 다음과 같습니다.
철수
20
즉, 딕셔너리는 이렇게 이해하면 됩니다.
key를 넣으면 value가 나온다
파이썬 딕셔너리 만들기
딕셔너리는 중괄호 {}를 사용해서 만듭니다.
student = {
"name": "영희",
"score": 95
}
딕셔너리 안의 key와 value는 콜론 :으로 연결합니다.
"name": "영희"
여러 쌍을 넣을 때는 쉼표 ,로 구분합니다.
student = {
"name": "영희",
"score": 95,
"grade": "A"
}
빈 딕셔너리도 만들 수 있습니다.
user = {}
빈 딕셔너리는 나중에 값을 하나씩 추가할 때 사용합니다.
user = {}
user["name"] = "철수"
user["age"] = 20
print(user)
실행 결과는 다음과 같습니다.
{'name': '철수', 'age': 20}
딕셔너리에서 값 꺼내기
딕셔너리에서 값을 꺼낼 때는 key를 사용합니다.
user = {
"name": "철수",
"age": 20,
"city": "서울"
}
print(user["name"])
print(user["city"])
실행 결과는 다음과 같습니다.
철수
서울
리스트는 인덱스로 값을 꺼냅니다.
fruits = ["사과", "바나나", "딸기"]
print(fruits[0])
딕셔너리는 key로 값을 꺼냅니다.
user = {
"name": "철수"
}
print(user["name"])
get()으로 값 꺼내기
딕셔너리에서 값을 꺼낼 때는 get()을 사용할 수도 있습니다.
user = {
"name": "철수",
"age": 20
}
print(user.get("name"))
실행 결과는 다음과 같습니다.
철수
대괄호와 get()은 없는 key를 사용할 때 차이가 있습니다.
print(user["city"])
이 코드는 오류가 발생합니다.
KeyError: 'city'
반면 get()은 없는 key를 사용해도 오류가 나지 않고 None을 반환합니다.
print(user.get("city"))
기본값을 직접 지정할 수도 있습니다.
print(user.get("city", "지역 정보 없음"))
실행 결과는 다음과 같습니다.
지역 정보 없음
초보 단계에서는 이렇게 기억하면 됩니다.
확실히 있는 key라면 []
없는 key일 수도 있다면 get()
딕셔너리에 값 추가하기
딕셔너리에 값을 추가하는 방법은 간단합니다.
user = {
"name": "철수",
"age": 20
}
user["city"] = "서울"
print(user)
실행 결과는 다음과 같습니다.
{'name': '철수', 'age': 20, 'city': '서울'}
새로운 key를 사용해서 값을 넣으면 딕셔너리에 항목이 추가됩니다.
딕셔너리 값 수정하기
이미 있는 key에 새로운 값을 넣으면 기존 값이 수정됩니다.
user = {
"name": "철수",
"age": 20
}
user["age"] = 21
print(user)
실행 결과는 다음과 같습니다.
{'name': '철수', 'age': 21}
정리하면 다음과 같습니다.
user["city"] = "서울" # city가 없으면 추가
user["age"] = 21 # age가 있으면 수정
딕셔너리 값 삭제하기
딕셔너리에서 값을 삭제할 때는 del을 사용할 수 있습니다.
user = {
"name": "철수",
"age": 20,
"city": "서울"
}
del user["city"]
print(user)
실행 결과는 다음과 같습니다.
{'name': '철수', 'age': 20}
pop()을 사용할 수도 있습니다.
user = {
"name": "철수",
"age": 20,
"city": "서울"
}
city = user.pop("city")
print(city)
print(user)
실행 결과는 다음과 같습니다.
서울
{'name': '철수', 'age': 20}
pop()은 값을 삭제하면서 삭제한 값을 반환합니다.
딕셔너리 key, value 확인하기
딕셔너리의 key만 확인하고 싶을 때는 keys()를 사용합니다.
user = {
"name": "철수",
"age": 20,
"city": "서울"
}
print(user.keys())
value만 확인하고 싶을 때는 values()를 사용합니다.
print(user.values())
key와 value를 함께 확인하고 싶을 때는 items()를 사용합니다.
print(user.items())
items()는 이후 반복문을 배울 때 자주 사용합니다.
for key, value in user.items():
print(key, value)
실행 결과는 다음과 같습니다.
name 철수
age 20
city 서울
반복문은 뒤에서 따로 다루므로, 지금은 items()가 key와 value를 함께 가져올 때 쓰인다는 정도만 이해하면 됩니다.
딕셔너리에 key가 있는지 확인하기
딕셔너리에 특정 key가 있는지 확인할 때는 in을 사용합니다.
user = {
"name": "철수",
"age": 20
}
print("name" in user)
print("city" in user)
실행 결과는 다음과 같습니다.
True
False
딕셔너리에서 in은 기본적으로 key를 기준으로 확인합니다.
value에 특정 값이 있는지 확인하고 싶다면 values()를 사용합니다.
print("철수" in user.values())
실행 결과는 다음과 같습니다.
True
딕셔너리를 사용할 때 좋은 경우
딕셔너리는 값에 이름을 붙여서 관리해야 할 때 유용합니다.
member = {
"id": "user01",
"name": "철수",
"email": "user01@example.com"
}
상품 정보도 딕셔너리로 표현하기 좋습니다.
product = {
"name": "노트북",
"price": 1200000,
"stock": 5
}
설정값을 저장할 때도 사용할 수 있습니다.
settings = {
"theme": "dark",
"language": "ko",
"notification": True
}
리스트와 비교하면 차이가 더 분명해집니다.
product = ["노트북", 1200000, 5]
이렇게 쓰면 각 값이 무엇을 의미하는지 바로 알기 어렵습니다.
반면 딕셔너리는 key가 의미를 설명해줍니다.
product = {
"name": "노트북",
"price": 1200000,
"stock": 5
}
그래서 여러 속성을 가진 하나의 대상을 표현할 때는 딕셔너리가 적합합니다.
집합 set은 무엇인가?
집합 set은 여러 값을 저장하는 자료형입니다.
numbers = {1, 2, 3}
집합은 중괄호 {}를 사용합니다. 다만 딕셔너리와 다르게 key와 value 쌍이 없습니다.
# 딕셔너리
user = {"name": "철수", "age": 20}
# 집합
numbers = {1, 2, 3}
딕셔너리는 콜론 :이 있습니다.
"name": "철수"
집합은 값만 나열합니다.
{1, 2, 3}
집합은 중복을 허용하지 않는다
집합 set의 가장 중요한 특징은 중복을 허용하지 않는다는 것입니다.
numbers = {1, 2, 2, 3, 3, 3}
print(numbers)
실행 결과는 다음과 비슷합니다.
{1, 2, 3}
중복된 값은 하나만 남습니다.
이 특징 때문에 집합은 중복 제거에 자주 사용됩니다.
names = ["철수", "영희", "철수", "민수", "영희"]
unique_names = set(names)
print(unique_names)
실행 결과는 다음과 비슷합니다.
{'철수', '영희', '민수'}
주의할 점은 집합은 리스트처럼 순서를 기준으로 사용하는 자료형이 아니라는 점입니다.
출력 순서는 실행 환경에 따라 다르게 보일 수 있습니다.
빈 집합 만들기
빈 집합을 만들 때는 주의해야 합니다.
empty = {}
print(type(empty))
실행 결과는 다음과 같습니다.
<class 'dict'>
{}는 빈 집합이 아니라 빈 딕셔너리입니다.
빈 집합을 만들려면 set()을 사용해야 합니다.
empty_set = set()
print(type(empty_set))
실행 결과는 다음과 같습니다.
<class 'set'>
따라서 이렇게 기억하면 됩니다.
{} → 빈 딕셔너리
set() → 빈 집합
집합에 값 추가하기
집합에 값을 추가할 때는 add()를 사용합니다.
numbers = {1, 2, 3}
numbers.add(4)
print(numbers)
실행 결과는 다음과 비슷합니다.
{1, 2, 3, 4}
이미 있는 값을 추가하면 중복으로 들어가지 않습니다.
numbers = {1, 2, 3}
numbers.add(2)
print(numbers)
실행 결과는 다음과 같습니다.
{1, 2, 3}
집합에서 값 삭제하기
집합에서 값을 삭제할 때는 remove()를 사용할 수 있습니다.
numbers = {1, 2, 3}
numbers.remove(2)
print(numbers)
실행 결과는 다음과 같습니다.
{1, 3}
다만 remove()는 없는 값을 삭제하려고 하면 오류가 발생합니다.
numbers.remove(4)
오류는 다음과 같습니다.
KeyError: 4
오류 없이 삭제하고 싶다면 discard()를 사용할 수 있습니다.
numbers = {1, 2, 3}
numbers.discard(4)
print(numbers)
실행 결과는 다음과 같습니다.
{1, 2, 3}
초보 단계에서는 이렇게 구분하면 됩니다.
값이 확실히 있으면 remove()
없을 수도 있으면 discard()
집합 연산 이해하기
집합은 수학의 집합처럼 사용할 수 있습니다.
python_students = {"철수", "영희", "민수"}
java_students = {"영희", "지연", "민수"}
합집합
합집합은 두 집합의 모든 값을 합친 것입니다.
result = python_students | java_students
print(result)
실행 결과는 다음과 비슷합니다.
{'철수', '영희', '민수', '지연'}
union()을 사용할 수도 있습니다.
result = python_students.union(java_students)
교집합
교집합은 두 집합에 공통으로 들어 있는 값입니다.
result = python_students & java_students
print(result)
실행 결과는 다음과 비슷합니다.
{'영희', '민수'}
intersection()을 사용할 수도 있습니다.
result = python_students.intersection(java_students)
차집합
차집합은 한쪽 집합에는 있지만 다른 집합에는 없는 값입니다.
result = python_students - java_students
print(result)
실행 결과는 다음과 같습니다.
{'철수'}
반대로 쓰면 결과가 달라집니다.
result = java_students - python_students
print(result)
실행 결과는 다음과 같습니다.
{'지연'}
차집합은 순서에 따라 결과가 달라진다는 점을 기억해야 합니다.
딕셔너리와 집합의 차이
딕셔너리와 집합은 모두 중괄호 {}를 사용하기 때문에 처음에는 헷갈릴 수 있습니다. 하지만 구조가 다릅니다.
| 구분 | 딕셔너리 | 집합 |
|---|---|---|
| 형태 | {key: value} |
{value1, value2} |
| 목적 | key로 value 관리 | 중복 없는 값 관리 |
| 값 접근 | key 사용 | 특정 위치 접근 불가 |
| 중복 | key 중복 불가 | 값 중복 불가 |
| 예시 | {"name": "철수"} |
{"철수", "영희"} |
딕셔너리는 key와 value가 있습니다.
user = {
"name": "철수",
"age": 20
}
집합은 값만 있습니다.
names = {"철수", "영희", "민수"}
딕셔너리는 특정 key의 값을 꺼낼 수 있습니다.
print(user["name"])
집합은 리스트처럼 names[0]으로 값을 꺼낼 수 없습니다.
names = {"철수", "영희", "민수"}
print(names[0])
이 코드는 오류가 발생합니다.
TypeError: 'set' object is not subscriptable
집합은 순서를 기준으로 값을 다루는 자료형이 아니기 때문입니다.
딕셔너리와 리스트를 함께 사용하기
실제 코드에서는 딕셔너리와 리스트를 함께 사용하는 경우도 많습니다.
students = [
{"name": "철수", "score": 90},
{"name": "영희", "score": 85},
{"name": "민수", "score": 92}
]
이 구조는 리스트 안에 딕셔너리가 들어 있는 형태입니다.
리스트는 여러 학생을 순서대로 담고 있습니다.
각 학생의 정보는 딕셔너리로 표현됩니다.
첫 번째 학생의 이름을 가져오려면 이렇게 쓸 수 있습니다.
print(students[0]["name"])
실행 결과는 다음과 같습니다.
철수
자주 발생하는 오류
없는 key를 사용할 때
딕셔너리에 없는 key를 대괄호로 가져오면 오류가 발생합니다.
user = {
"name": "철수",
"age": 20
}
print(user["city"])
오류는 다음과 같습니다.
KeyError: 'city'
없는 key일 수도 있다면 get()을 사용하면 됩니다.
print(user.get("city", "지역 정보 없음"))
딕셔너리와 집합을 헷갈리는 경우
다음 코드는 딕셔너리입니다.
data = {"name": "철수"}
다음 코드는 집합입니다.
data = {"철수"}
콜론 :이 있으면 딕셔너리입니다.
값만 있으면 집합입니다.
빈 집합을 {}로 만드는 경우
빈 집합을 만들고 싶어서 다음처럼 쓰면 안 됩니다.
data = {}
이 코드는 빈 딕셔너리입니다.
빈 집합은 이렇게 만듭니다.
data = set()
딕셔너리와 집합 예제 정리
딕셔너리 예제를 다시 정리해보겠습니다.
book = {
"title": "파이썬 기초",
"price": 15000,
"author": "홍길동"
}
book["price"] = 18000
book["publisher"] = "테크출판"
print(book["title"])
print(book.get("publisher"))
print(book)
실행 결과는 다음과 같습니다.
파이썬 기초
테크출판
{'title': '파이썬 기초', 'price': 18000, 'author': '홍길동', 'publisher': '테크출판'}
이번에는 집합 예제입니다.
tags = ["python", "basic", "python", "list", "basic"]
unique_tags = set(tags)
print(unique_tags)
실행 결과는 다음과 비슷합니다.
{'python', 'basic', 'list'}
집합을 사용하면 중복된 값을 제거할 수 있습니다.
정리
딕셔너리와 집합은 모두 여러 값을 다룰 때 사용하는 자료형입니다.
하지만 목적이 다릅니다.
딕셔너리는 key와 value를 한 쌍으로 저장합니다.
user = {
"name": "철수",
"age": 20
}
key를 사용해서 값을 꺼낼 수 있습니다.
print(user["name"])
집합 set은 중복 없는 값을 저장할 때 사용합니다.
numbers = {1, 2, 2, 3}
결과적으로 중복된 값은 하나만 남습니다.
{1, 2, 3}
초보 단계에서는 이렇게 기억하면 됩니다.
딕셔너리: 이름표가 붙은 값 관리
집합 set: 중복 없는 값 관리
리스트, 튜플, 딕셔너리, 집합까지 이해하면 파이썬의 기본 자료형 흐름을 어느 정도 잡은 것입니다.
다음 글에서는 조건에 따라 코드를 실행하는 if 조건문을 알아보겠습니다.
'개발 > python' 카테고리의 다른 글
| 파이썬 반복문 for while 사용법 쉽게 이해하기 (0) | 2026.05.21 |
|---|---|
| 파이썬 조건문 if 사용법 쉽게 이해하기 (0) | 2026.05.21 |
| 파이썬 리스트와 튜플 차이 쉽게 이해하기 (0) | 2026.05.21 |
| 파이썬 문자열 사용법: 초보자가 자주 헷갈리는 예제 중심 정리 (0) | 2026.05.21 |
| 파이썬 변수와 자료형 쉽게 이해하기: 초보자를 위한 Python 기초 (0) | 2026.05.20 |