자료구조 총정리 — 언제 무엇을 쓸까
리스트, 튜플, 세트, 딕셔너리 네 가지를 한자리에 놓고 비교합니다.
그리고 이 네 가지를 따로 쓰지 않고 조합해서 써 보는 예제도 다루어보아요.
요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠.
개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.
이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.
고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.
중간중간 빈칸 채우기랑 학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.
우리는 총 4가지의 자료구조를 배웠습니다: 리스트(List), 튜플(Tuple), 세트(Set), 딕셔너리(Dictionary).
모두 여러 개의 데이터를 저장해 다루기 위해 사용하지만, 저마다 쓰이는 목적이 다릅니다.
리스트 → 출석부 (순서대로 이름이 있고 수정 가능)
튜플 → 시험 시간표 (정해지면 바뀌지 않음)
세트 → 중복 없이 모은 학생 번호
딕셔너리 → 생활기록부 (이름, 반, 번호 등 정보 저장)
| 구분 | 리스트 | 튜플 | 세트 | 딕셔너리 |
|---|---|---|---|---|
| 기호 | [] |
() |
{} |
{} |
| 순서 | O | O | X | 입력 순서 유지* |
| 중복 | O | O | X | Key X / Value O |
| 인덱스 | O | O | X | X (Key 사용) |
| 수정 | O | X | △ | O |
| 추가 / 삭제 | O | X | O | O |
* 파이썬 3.7 이상에서는 딕셔너리가 입력한 순서를 유지하지만, 값을 가져올 때는 인덱스가 아니라 Key를 사용합니다.
* 세트는 리스트처럼 특정 원소를 인덱스로 콕 집어서 수정하는 것은 불가능하지만, add() / remove() 로 원소를 넣고 빼는 건 가능하기 때문에 △ 로 표기했습니다.
데이터를 계속 추가하고 삭제한다 → 리스트
절대 바뀌면 안 된다 → 튜플
같은 값이 있으면 안 된다 → 세트
이름과 값을 함께 저장한다 → 딕셔너리
student = {"이름": "홍길동"} # 딕셔너리
콜론(:)이 있으면 딕셔너리, 없으면 세트입니다. 그리고 numbers = {}는 빈 세트가 아니라 빈 딕셔너리라는 것, 10화에서 짚었던 내용 기억나시나요?
- 중복을 허용하지 않는 자료구조는?
- Key와 Value를 한 쌍으로 사용하는 자료구조는?
- 값을 절대 수정할 수 없는 자료구조는?
정답
2. 딕셔너리(Dictionary)
3. 튜플(Tuple)
- 다음 상황에 적합한 자료구조를 각각 고르시오: (1) 학생 이름 목록 (2) RGB 색상 (3) 중복 없는 학번 (4) 회원 정보
정답
지금까지는 각각의 자료구조를 따로따로 살펴보았습니다. 당연히 실제 프로그램에서는 여러 자료구조를 함께 사용하겠죠?
학생이 100명 있다고 생각해 봅시다. 학생 한 명은 이름·나이·점수를 가지고 있으니 딕셔너리가 어울리고, 학생 100명 전체는 리스트가 어울립니다. 그래서 딕셔너리를 리스트에 넣어서 사용합니다.
{"이름": "김철수", "점수": 90},
{"이름": "이영희", "점수": 80}
]
print(students[0]["이름"])
어떻게 읽을까요? students[0] → 첫 번째 학생(딕셔너리 하나) → ["이름"] → 그 학생의 이름. 바깥은 번호(리스트), 안쪽은 이름표(딕셔너리)로 두 번 찾아 들어가는 거예요.
{"상품": "사과", "가격": 3000},
{"상품": "우유", "가격": 2500}
]
total = 0
for item in cart:
print(item["상품"])
total += item["가격"]
print("총 금액 :", total)
우유
총 금액 : 5500
8화에서 배운 "total = 0으로 초기화하고 반복하며 더하기" 패턴이 여기서도 그대로 쓰입니다. 다만 이번엔 숫자가 아니라 item["가격"]처럼 딕셔너리 안의 값을 꺼내서 더하는 것뿐이에요.
"이름": "김철수",
"점수": [90, 95, 100],
"생일": (2008, 5, 12)
}
print(student["점수"])
print(student["점수"][0])
print(student["생일"])
90
(2008, 5, 12)
딕셔너리의 값(Value) 자리에는 숫자나 문자열뿐 아니라 리스트, 세트, 튜플, 심지어 또 다른 딕셔너리도 들어갈 수 있습니다. 여러 번의 시험 점수처럼 값 자체가 여러 개라면 리스트를, 생일처럼 절대 안 바뀌는 값이라면 튜플을 넣으면 됩니다.
실무에서는 리스트 안에 딕셔너리 구조가 특히 자주 나옵니다. 웹사이트에서 데이터를 받아오면 대부분 이런 모양이에요.
{"id": 1, "name": "홍길동", "age": 20},
{"id": 2, "name": "김철수", "age": 22}
]
- 다음 코드의 실행 결과를 작성하시오.
books = [
{"제목": "파이썬", "가격": 15000},
{"제목": "자바", "가격": 18000}
]
print(books[1]["제목"])
정답
- 리스트 안에 딕셔너리를 사용하는 이유를 서술하시오.
정답
{"이름": "김철수", "점수": 95},
{"이름": "이영희", "점수": 80},
{"이름": "박민수", "점수": 100}
]
for student in students:
print(student["이름"], ":", student["점수"])
if student["점수"] >= 90:
print("우수 학생")
print()
리스트로 여러 학생을 순회하고, 딕셔너리로 각 학생의 정보를 꺼내고, if로 조건을 검사하고 — 지금까지 배운 것들이 전부 한 프로그램 안에 모였습니다.
'Language > Python' 카테고리의 다른 글
| [고등학생부터, 파이썬] 14. 함수(Function) (0) | 2026.08.20 |
|---|---|
| [고등학생부터, 파이썬] 12. 딕셔너리(Dictionary) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 11. 튜플(Tuple)과 세트(Set) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 10. 리스트(List) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 09. 중첩 반복문 (feat. 별찍기 예제) (0) | 2026.08.19 |
댓글