본문 바로가기

코딩과 AI와 자동화/코딩

4편. 데이터 구조(리스트, 딕셔너리) 이해하기 – 파이썬 기초 코딩 필수 개념

반응형

이전 글에서는「3편. 조건문·반복문 완전 정복」을 다뤘습니다.

 

이제부터는

“데이터를 어떻게 담고 관리할 것인지

를 다룰 차례입니다

.
그 출발점이 바로 리스트(list)와 딕셔너리(dict)입니다.

  • 파이썬에서 가장 많이 쓰이는 기본 데이터 구조
  • 실무 코드, 알고리즘, 웹/데이터 분석, 챗봇 로직까지 전부 이 둘을 바탕으로 구성되는 경우가 많습니다.

이번 글에서는 어렵게 이론을 파고들기보다,

  • 언제 리스트를 쓰고, 언제 딕셔너리를 쓰는지
  • 실제 코드 예제를 통해 감 잡기

에 집중해서 설명하겠습니다.


1. 왜 데이터 구조가 중요한가?

간단한 예를 들어 보겠습니다.

“학생 점수 3개를 저장하고, 평균을 구하라”

만약 변수를 하나씩 만든다면:

score1 = 90
score2 = 85
score3 = 100

avg = (score1 + score2 + score3) / 3

학생이 3명일 때는 괜찮지만,
30명, 300명이 되면 코드가 감당이 안 됩니다.

 

그래서 우리는

  • 여러 개의 데이터를 한 번에 묶어서 관리하는 구조
  • 필요할 때는 꺼내 쓰고, 반복문과 함께 쉽게 처리할 수 있는 구조

가 필요합니다.
그 역할을 하는 것이 바로 리스트와 딕셔너리입니다.


2. 리스트(List) – 순서가 있는 데이터 모음

리스트는 대괄호 []로 감싸서 여러 값을 한 번에 저장하는 자료형입니다.

scores = [90, 85, 100]
fruits = ["apple", "banana", "cherry"]
mixed = [10, "파이썬", True]
  • 순서(index)가 있습니다.
  • 0부터 시작하는 인덱스로 값에 접근합니다.
print(scores[0])  # 90
print(scores[1])  # 85
print(scores[2])  # 100

2-1. 리스트 수정하기

리스트 안의 값을 바꾸는 것도 가능합니다.

scores[1] = 95   # 두 번째 점수를 95로 수정
print(scores)    # [90, 95, 100]

2-2. 값 추가·삭제

자주 쓰는 메서드 몇 가지만 정리해 보겠습니다.

numbers = [1, 2, 3]

numbers.append(4)      # 맨 뒤에 4 추가
# [1, 2, 3, 4]

numbers.insert(1, 1.5) # 인덱스 1 위치에 1.5 삽입
# [1, 1.5, 2, 3, 4]

numbers.remove(3)      # 값 3을 제거 (처음 나온 것만)
# [1, 1.5, 2, 4]

last = numbers.pop()   # 마지막 값 꺼내기 (삭제 + 반환)
# last = 4, numbers = [1, 1.5, 2]

2-3. 리스트와 반복문은 항상 세트

리스트의 진짜 힘은 반복문과 함께 쓸 때 나옵니다.

scores = [90, 85, 100, 70]

total = 0
for s in scores:
    total += s

avg = total / len(scores)
print("평균 점수:", avg)
  • for s in scores: → 리스트에 들어 있는 값을 앞에서부터 하나씩 꺼내기
  • len(scores) → 리스트 길이(원소 개수)

조건문·반복문을 이미 익히셨다면,
리스트를 다루는 일은 “자료형만 달라졌을 뿐, 패턴은 동일”하다는 걸 느끼실 겁니다.

]


3. 딕셔너리(Dictionary) – “이름표를 붙여서” 저장하는 구조

리스트는 순서로 데이터를 찾지만,
딕셔너리는 “키(key)”라는 이름표로 데이터를 찾습니다.

student = {
    "name": "홍길동",
    "age": 20,
    "major": "컴퓨터공학"
}
  • "name", "age", "major" → 키(key)
  • "홍길동", 20, "컴퓨터공학" → 값(value)

값을 꺼낼 때는 인덱스가 아니라 키를 사용합니다.

print(student["name"])   # 홍길동
print(student["age"])    # 20

3-1. 값 추가·수정·삭제

student["grade"] = "A"   # 새 키 추가
student["age"] = 21      # 기존 값 수정

print(student)
# {'name': '홍길동', 'age': 21, 'major': '컴퓨터공학', 'grade': 'A'}

del student["major"]     # 'major' 키 삭제

3-2. 안전하게 가져오기 – get()

존재하지 않을 수도 있는 키를 사용할 때는 get()을 쓰면 에러를 피할 수 있습니다.

nickname = student.get("nickname")         # 없으면 None 반환
nickname2 = student.get("nickname", "없음") # 기본값 지정 가능

print(nickname)   # None
print(nickname2)  # 없음

3-3. 키·값·쌍 한 번에 다루기

print(student.keys())    # dict_keys(['name', 'age', 'grade'])
print(student.values())  # dict_values(['홍길동', 21, 'A'])
print(student.items())   # dict_items([('name', '홍길동'), ('age', 21), ('grade', 'A')])

for key, value in student.items():
    print(key, ":", value)

딕셔너리는
JSON, API 응답, 데이터베이스 레코드 등 실제 서비스와 데이터를 주고받을 때 기본 구조라고 생각하시면 됩니다.


4. 리스트 vs 딕셔너리, 언제 무엇을 쓸까?

많이 헷갈리는 부분이 바로 이 부분입니다.
간단한 기준을 정리해 볼게요.

4-1. 리스트가 더 어울리는 상황

  • 순서대로 처리해야 하는 데이터”
    • 예: 온도 기록, 주가, 방문자 수 등 시간 순서 데이터
  • 인덱스 번호로 접근해도 될 때
  • 단순히 값의 모음이라, 각 값에 이름을 따로 붙일 필요가 없을 때
temperatures = [18.5, 19.2, 21.0, 20.3]  # 하루 시간대별 온도

4-2. 딕셔너리가 더 어울리는 상황

  • 하나의 **객체(사람, 상품, 게시글)**에 여러 속성이 붙어 있을 때
  • “번호 0, 1, 2”보다 name, price, title 같은 이름이 더 직관적일 때
  • 키로 바로 찾아 쓰고 싶을 때
user = {
    "id": 1001,
    "username": "coder_lee",
    "email": "lee@example.com"
}

4-3. 가장 많이 쓰는 조합: “딕셔너리의 리스트”

실무 코드에서 가장 자주 등장하는 형태입니다.

students = [
    {"name": "철수", "score": 85},
    {"name": "영희", "score": 92},
    {"name": "민수", "score": 78},
]

# 90점 이상 학생만 출력
for s in students:
    if s["score"] >= 90:
        print(s["name"], ":", s["score"])
  • 리스트: 학생 여러 명을 순서대로 담는 역할
  • 딕셔너리: 각 학생이 가진 정보(이름, 점수)를 표현

웹 개발, 데이터 분석, API 응답 파싱에서
이 패턴을 정말 자주 만나게 됩니다.


5. 이번 글에서 꼭 가져가야 할 핵심 요약

마지막으로 한 번 정리해 봅시다.

  1. 리스트(list)
    • 여러 값을 순서대로 저장하는 구조
    • 인덱스(0, 1, 2, …)로 접근
    • append, insert, remove, pop, len() 자주 사용
  2. 딕셔너리(dict)
    • 키: 값 쌍으로 데이터를 저장
    • “이름표(키)”로 바로 찾는 구조
    • student["name"], get(), keys(), items() 자주 사용
  3. 언제 어떤 걸 쓸까?
    • 순서대로만 다루면 리스트
    • 각 항목에 여러 속성이 붙어 있으면 딕셔너리
    • 실제로는 “딕셔너리의 리스트” 조합을 가장 많이 쓰게 된다.

🔔 다음 글 예고 – 5편. 함수(Function)로 코드 구조화하기

지금까지 우리는

  • 변수
  • 조건문
  • 반복문
  • 리스트·딕셔너리

까지 배웠습니다.
이제 남은 큰 퍼즐 조각 하나가 있습니다. 바로 함수(Function)입니다.

다음 글「5편. 함수(Function)로 코드 구조화하기」에서는

  • 왜 함수를 쓰면 코드가 훨씬 읽기 쉬워지는지
  • 리스트·딕셔너리를 함수의 입력/출력으로 사용하면서
  • “잘 구조화된 코드”를 만드는 방법

을 단계별로 정리해 보겠습니다.

반응형