PythonPython 기초 · 4입문

리스트와 딕셔너리 — 파이썬의 핵심 자료구조

Python리스트딕셔너리자료구조컴프리헨션

여러 값을 한 번에 관리하기

변수를 하나씩 만들면 불편합니다.

# ❌ 이렇게 하면 안 됨
student1 = "철수"
student2 = "영희"
student3 = "민준"

# ✅ 리스트로 묶기
students = ["철수", "영희", "민준"]

리스트 (List)

순서가 있고, 중복 허용, 변경 가능한 자료구조입니다.

fruits = ["사과", "바나나", "체리", "사과"]  # 중복 허용

# 인덱싱
print(fruits[0])    # 사과 (첫 번째)
print(fruits[-1])   # 사과 (마지막)

# 슬라이싱
print(fruits[1:3])  # ['바나나', '체리']
print(fruits[:2])   # ['사과', '바나나']
print(fruits[::2])  # ['사과', '체리']  (2칸씩)

리스트 조작

items = ["A", "B", "C"]

# 추가
items.append("D")        # 끝에 추가: ['A', 'B', 'C', 'D']
items.insert(1, "X")     # 인덱스 1에 삽입: ['A', 'X', 'B', 'C', 'D']

# 삭제
items.remove("X")        # 값으로 삭제
deleted = items.pop()    # 마지막 요소 꺼내기: 'D'
deleted = items.pop(0)   # 인덱스로 꺼내기: 'A'

# 검색
print("B" in items)      # True
print(items.index("C"))  # 1

# 정렬
nums = [3, 1, 4, 1, 5, 9]
nums.sort()              # 원본 수정: [1, 1, 3, 4, 5, 9]
sorted_nums = sorted(nums, reverse=True)  # 새 리스트: [9, 5, 4, 3, 1, 1]

# 길이
print(len(items))        # 2

리스트 컴프리헨션

반복문으로 리스트를 만드는 파이썬다운 방법입니다.

# 일반 반복문
squares = []
for n in range(1, 6):
    squares.append(n ** 2)
# [1, 4, 9, 16, 25]

# 리스트 컴프리헨션 (한 줄로)
squares = [n ** 2 for n in range(1, 6)]
# [1, 4, 9, 16, 25]

# 조건 추가
evens = [n for n in range(20) if n % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

# 문자열 변환
names = ["alice", "bob", "charlie"]
upper_names = [name.upper() for name in names]
# ['ALICE', 'BOB', 'CHARLIE']

딕셔너리 (Dictionary)

키(key)와 값(value)의 쌍으로 저장합니다. 순서 있음 (Python 3.7+), 키는 중복 불가.

person = {
    "name": "김철수",
    "age": 25,
    "job": "개발자",
    "skills": ["Python", "JavaScript"]
}

# 값 접근
print(person["name"])          # 김철수
print(person.get("email", "없음"))  # 없음 (키가 없을 때 기본값)

# 추가/수정
person["email"] = "kim@example.com"
person["age"] = 26

# 삭제
del person["job"]
removed = person.pop("email")

# 키 존재 확인
print("name" in person)   # True

딕셔너리 순회

profile = {"name": "철수", "age": 25, "city": "서울"}

# 키만
for key in profile:
    print(key)

# 값만
for value in profile.values():
    print(value)

# 키-값 쌍
for key, value in profile.items():
    print(f"{key}: {value}")

딕셔너리 컴프리헨션

# 제곱수 딕셔너리
squares = {n: n**2 for n in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# 필터링
scores = {"철수": 85, "영희": 92, "민준": 67, "지수": 78}
passed = {name: score for name, score in scores.items() if score >= 70}
# {'철수': 85, '영희': 92, '지수': 78}

튜플 (Tuple)

리스트와 비슷하지만 **변경 불가(immutable)**합니다.

point = (10, 20)          # 좌표
rgb = (255, 128, 0)       # 색상

x, y = point              # 언패킹
print(f"x={x}, y={y}")   # x=10, y=20

# 함수에서 여러 값 반환할 때 자동으로 튜플
def get_range(nums):
    return min(nums), max(nums)

lo, hi = get_range([3, 1, 4, 1, 5])   # (1, 5) 언패킹

집합 (Set)

순서 없음, 중복 제거, 수학적 집합 연산.

a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}

print(a & b)   # {3, 4, 5}  교집합
print(a | b)   # {1,2,3,4,5,6,7} 합집합
print(a - b)   # {1, 2}     차집합

# 중복 제거
data = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(data))   # [1, 2, 3, 4]

실전 패턴: JSON 데이터 처리

API 응답은 대부분 딕셔너리/리스트 구조입니다.

import json

# API 응답 예시
response_text = '''
{
    "users": [
        {"id": 1, "name": "철수", "active": true},
        {"id": 2, "name": "영희", "active": false},
        {"id": 3, "name": "민준", "active": true}
    ],
    "total": 3
}
'''

data = json.loads(response_text)

# 활성 사용자만 추출
active_users = [
    user["name"] 
    for user in data["users"] 
    if user["active"]
]
print(active_users)  # ['철수', '민준']
print(f"전체: {data['total']}명, 활성: {len(active_users)}명")

자료구조 비교

자료구조문법순서중복변경주요 용도
list[1, 2, 3]순서 있는 목록
dict{"a": 1}키 불가키-값 매핑
tuple(1, 2, 3)불변 데이터
set{1, 2, 3}중복 제거

정리

개념핵심
리스트순서 있는 가변 컬렉션, .append(), .remove()
리스트 컴프리헨션[expr for x in iter if cond]
딕셔너리키-값 쌍, .get(), .items()
딕셔너리 컴프리헨션{k: v for k, v in iter}
튜플불변 리스트, 언패킹 가능
집합중복 제거, 집합 연산

다음 편에서는 파일 입출력 — 파일을 읽고 쓰고, CSV·JSON 데이터를 처리하는 방법을 배웁니다.

궁금한 점이 있으신가요?

협업·의뢰는 아래로, 가벼운 소통은 인스타그램 @bluefox._.hi도 환영이에요.