📚 변하지 않는 튜플(Tuple) & 키-값 쌍의 딕셔너리(Dictionary)
도입부 리스트가 자유롭게 데이터를 넣고 빼는 가방이라면, 절대 내용물이 바뀌면 안 되는 금고 같은 자료구조도 필요하겠죠?
오늘은 읽기 전용 리스트인 **튜플(Tuple)**과, 라벨을 붙여 데이터를 보관하는 **딕셔너리(Dictionary)**를 알아봅니다.
1. 튜플 (Tuple): 절대 변하지 않는 안전 금고
튜플은 리스트와 99% 똑같습니다. 인덱스로 값을 찾고, 슬라이싱도 됩니다.
**딱 하나 다른 점은 '한 번 만들어지면 내부의 값을 절대 바꿀 수 없다'**는 것입니다. 실수로 데이터가 지워지거나 변경되는 것을 막고 싶을 때 사용합니다.
- 만들기: 소괄호 ( )를 사용하거나 그냥 쉼표로 연결합니다.
t = (1, 2, 3, 4)
t2 = 10, 20, 30 # 소괄호 생략 가능
# ★주의: 원소가 1개인 튜플을 만들 때는 꼭 끝에 쉼표를 찍어야 합니다!
t3 = (10,)
t4 = 10,
- 특징: 값을 변경할 수 없으므로 append(), remove() 같은 수정용 메소드는 사용할 수 없고, index()와 count() 정도만 지원합니다.
2. 딕셔너리 (Dictionary): 이름표(Key)가 붙은 보관함
리스트나 튜플은 '0번, 1번' 같은 순서(인덱스)로 데이터를 찾았습니다. 하지만 학생의 정보를 [ "홍길동", 20, "010-1234-5678" ] 처럼 묶어두면 두 번째 값이 나이인지 키인지 헷갈리죠. 딕셔너리는 사전처럼 **'단어(Key)'**와 **'뜻(Value)'**을 한 쌍으로 묶어 저장합니다.
- 만들기: 중괄호 { }를 사용하며 키: 값 형태로 적습니다.
info = {
"이름": "자비스",
"나이": 30,
"거주지": "서울"
}
3. 딕셔너리 다루기
- 조회하기: 딕셔너리명[키] 로 찾습니다.
- 추가 및 변경: 없는 키를 쓰면 추가되고, 있는 키를 쓰면 값이 변경(덮어쓰기)됩니다.
print(info["이름"]) # "자비스"
info["나이"] = 31 # 나이 값 변경
info["취미"] = "코딩" # 새로운 키-값 쌍 추가
💡 딕셔너리 꿀팁 메소드
메소드역할
| get() | 안전하게 값 가져오기 |
| keys() | 키만 |
| values() | 값만 |
| items() | 키 + 값 |
- get(키, 기본값): info["키"] 방식으로 찾을 때 해당 키가 없으면 에러(KeyError)가 나서 프로그램이 멈춥니다. 하지만 info.get("키")를 쓰면 에러 대신 안전하게 None을 돌려줍니다.
- keys() / values() / items(): 딕셔너리 안에 있는 키들만, 값들만, 혹은 둘 다 쌍으로 묶어서 가져올 때 사용합니다.
.get() 메소드
✔ 없는 키 접근 → 무조건 get()
info = {"name": "철수"}
print(info["age"])
# KeyError 발생 → 프로그램 멈춤
info = {"name": "철수"}
print(info.get("age"))
# None 출력 (에러 없음)
.key() 메소드 - Key 값만
info = {"name": "철수", "age": 20}
print(info.keys())
#결과값 dict_keys(['name', 'age'])
for key in info.keys():
print(key)
# name
# age
for key in info:
print(key)
# 이렇게도 많이 씀
.values()
info = {"name": "철수", "age": 20}
print(info.values())
# dict_values(['철수', 20])
for value in info.values():
print(value)
# 철수
# 20
.items()
✔ 딕셔너리 반복 → items()
info = {"name": "철수", "age": 20}
print(info.items())
dict_items([('name', '철수'), ('age', 20)])
for key, value in info.items():
print(key, value)
# name
# 철수
코딩 테스트 단골 get으로 카운팅 만들기
words = ["a", "b", "a", "c", "a"]
count = {}
for w in words:
count[w] = count.get(w, 0) + 1
print(count)
# {'a': 3, 'b': 1, 'c': 1}
📝 2편 복습 퀴즈
Q1. 다음 중 데이터 값이 한 번 저장되면 중간에 절대 변경, 추가, 삭제할 수 없는(Immutable) 자료구조는?
① 리스트 (List) ② 딕셔너리 (Dictionary) ③ 셋 (Set) ④ 튜플 (Tuple)
Q2. 원소가 딱 1개 들어있는 튜플(Tuple)을 올바르게 생성한 코드는 무엇인가요?
① t = (10) ② t = (10,) ③ t = [10] ④ t = {10}
Q3. 딕셔너리를 생성할 때 키(Key)와 값(Value)을 연결해주는 기호는 무엇인가요?
① = ② , ③ : ④ -
Q4. 딕셔너리 d = {"이름": "자비스"} 에서 값을 안전하게 조회하려고 합니다. 만약 찾는 키가 없더라도 에러를 발생시키지 않고 None을 반환하는 안전한 조회 메소드는?
① d.find("나이") ② d.search("나이") ③ d.get("나이") ④ d.value("나이")
Q5. 딕셔너리에 들어있는 모든 '키(Key)'들만 모아서 확인하고 싶을 때 사용하는 메소드는?
① items() ② values() ③ keys() ④ elements()
💡 정답 확인: Q1: ④ / Q2: ② (쉼표가 없으면 그냥 일반적인 수학 연산용 괄호로 인식하여 정수 10이 됩니다.) / Q3: ③ / Q4: ③ / Q5: ③
'두두 IT > 파이썬' 카테고리의 다른 글
| UV VENV 가상환경 구성(1) - 파워쉘과 VSCode (0) | 2026.04.29 |
|---|---|
| [PYTHON 3-3] 중복 없는 셋(Set) & 자료구조 (1) | 2026.04.15 |
| [PYTHON 3-1] 여러 데이터를 하나로! 리스트(List) (0) | 2026.04.15 |
| [PYTHON 2-3] 문자열(String)과 포매팅 (0) | 2026.04.14 |
| [PYTHON 2-2] 데이터 타입과 연산자 (0) | 2026.04.14 |