Python 리스트와 딕셔너리
이 토픽을 마치면
리스트와 딕셔너리의 차이를 설명할 수 있고, 상황에 맞게 골라 사용할 수 있습니다.
리스트 — 순서가 있는 모음
리스트는 여러 값을 순서대로 담는 컨테이너입니다. 대괄호([])로 만듭니다.
python
fruits = ["사과", "바나나", "포도"]
# 인덱싱print(fruits[0]) # '사과'print(fruits[-1]) # '포도'
# 수정fruits[1] = "딸기" # ['사과', '딸기', '포도']
# 추가/삭제fruits.append("망고") # 끝에 추가fruits.insert(0, "수박") # 0번 위치에 삽입fruits.remove("포도") # 값으로 삭제del fruits[0] # 인덱스로 삭제리스트는 가변(mutable) 입니다. 만든 뒤에 얼마든지 수정, 추가, 삭제할 수 있습니다.
리스트 순회와 가공
python
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# 순회for n in numbers: print(n, end=" ") # 3 1 4 1 5 9 2 6
# 정렬sorted_nums = sorted(numbers) # [1, 1, 2, 3, 4, 5, 6, 9] — 원본 유지numbers.sort() # 원본 자체를 정렬
# 유용한 내장 함수print(len(numbers)) # 8print(sum(numbers)) # 31print(min(numbers)) # 1print(max(numbers)) # 9
# 리스트 컴프리헨션 — 한 줄로 새 리스트 생성squares = [x ** 2 for x in range(5)]# [0, 1, 4, 9, 16]리스트 컴프리헨션은 for 루프를 한 줄로 압축한 것입니다. Python 코드에서 매우 자주 보이므로 익숙해져야 합니다.
딕셔너리 — 이름으로 찾는 저장소
딕셔너리는 키(key)와 값(value)의 쌍으로 데이터를 저장합니다. 중괄호({})로 만듭니다.
python
user = { "name": "김훈", "age": 30, "email": "hoon@example.com"}
# 조회print(user["name"]) # '김훈'print(user.get("phone")) # None (에러 대신 None 반환)
# 추가/수정user["phone"] = "010-1234" # 키가 없으면 추가user["age"] = 31 # 키가 있으면 수정
# 삭제del user["email"]리스트가 "몇 번째?"(인덱스)로 찾는다면, 딕셔너리는 "이름이 뭐야?"(키)로 찾습니다. 키는 보통 문자열이지만, 숫자나 튜플도 가능합니다.
딕셔너리 순회
python
scores = {"국어": 90, "영어": 85, "수학": 95}
# 키 순회for subject in scores: print(subject) # 국어, 영어, 수학
# 키와 값 동시 순회for subject, score in scores.items(): print(f"{subject}: {score}점")
# 값만 순회total = sum(scores.values())print(f"총점: {total}") # 270
# 키 존재 확인if "과학" in scores: print(scores["과학"])else: print("과학 점수 없음").items()는 (키, 값) 쌍을 반환합니다. .keys()는 키만, .values()는 값만 반환합니다.
리스트 vs 딕셔너리 — 언제 무엇을
| 상황 | 선택 | 이유 |
|---|---|---|
| 순서가 중요 (1번, 2번, 3번...) | 리스트 | 인덱스로 순서 보장 |
| 이름으로 찾아야 함 ("name", "age") | 딕셔너리 | 키로 즉시 접근 |
| 중복 값 허용 | 리스트 | [1, 1, 2, 3] 가능 |
| 키는 고유해야 함 | 딕셔너리 | 같은 키 두 번 넣으면 덮어씀 |
| 100만 건에서 검색 | 딕셔너리 | 키 검색 O(1) vs 리스트 검색 O(n) |
실무에서 가장 흔한 패턴은 딕셔너리의 리스트입니다. 데이터베이스의 테이블을 떠올리면 됩니다.
python
users = [ {"name": "김훈", "age": 30}, {"name": "이수", "age": 25}, {"name": "박진", "age": 35},]
# 30세 이상만 필터링seniors = [u for u in users if u["age"] >= 30]JSON 파일, API 응답, 설정 파일 — 대부분 이 "딕셔너리 리스트" 형태입니다. 이 두 자료형을 자유롭게 조합할 수 있으면, Python 데이터 처리의 기본기를 갖춘 것입니다.