딕셔너리(dictionary)란?
영어에서 '딕셔너리(dictionary)'라는 단어는 '사전'이라는 의미를 가지고 있다. 영한사전을 펼쳐보면 영어 단어와 그에 해당하는 한국어 뜻이 짝을 지어 나열되어 있다.
apple: 사과
grape: 포도
banana: 바나나
이를 좀 더 프로그래밍적으로 표현한다면 키(key)와 값(value)의 쌍의 데이터를 저장하고 있다고 할 수 있다. 여기서 키에 해당하는 것은 영어 단어이고, 값에 해당하는 것은 한국어 뜻인 것이다.
그렇다. 이것이 파이썬의 딕셔너리다.
우리가 알고 있는 영한사전을 떠올리면 된다. 그것이 바로 딕셔너리라는 자료구조의 형태이다!
그래서 정리하자면,
파이썬에서 딕셔너리는 키와 값의 쌍으로 데이터를 저장하는 자료구조다. 마치 사전에서 단어(키)와 그에 대한 정의(값)를 찾는 것처럼, 딕셔너리를 사용하면 키를 통해 빠르게 값을 조회할 수 있다.
딕셔너리 생성하기
딕셔너리는 중괄호 {}를 사용하여 정의하며, 키와 값은 콜론 :으로 구분하여 표현한다.
car = {
'브랜드': '현대',
'모델': '쏘나타',
'연식': 2020
}
키는 변경 불가능한 객체, 즉 문자열이나 숫자여야 하지만, 값은 어떤 객체이든지 가능하다.
또한, 키는 고유한 값이어야 하지만, 값은 중복되어도 상관없다.
공백 딕셔너리는 단순히 {}로 생성한다.
d = {}
딕셔너리 접근 및 수정
값 접근하기
딕셔너리에서 항목을 꺼낼 때는 항목의 키를 사용하면 된다. 특정 키의 값을 접근하려면 대괄호 []를 사용하거나 get() 메서드를 사용한다.
contacts = {"Johan": "123-456-7890", "Mikael": "098-765-4321", "Sara": "456-789-0123"}
contacts["Johan"] # "123-456-7890"
contacts.get("Johan") # "123-456-7890"
만약 키가 딕셔너리에 없으면 대괄호를 사용하여 접근을 한 경우엔 KeyError 오류가 발생하고, get() 메서드를 사용한 경우에는 None을 반환한다. get() 메서드에는 특별히 두 번째 인자로 디폴트값을 전달해 줄 수 있는데, 이 경우에는 해당 값이 없더라도 None이 아닌 디폴트값을 반환한다.
contacts = {"Johan": "123-456-7890", "Mikael": "098-765-4321", "Sara": "456-789-0123"}
print(contacts["Jane"]) # KeyError: 'Jane'
print(contacts.get("Jane")) # None
print(contacts.get("Jane", "Unknown")) # Unknown
키가 딕셔너리에 있는지 확인하려면 in 연산자를 사용한다.
'Sara' in contacts # True
값 수정하기
딕셔너리의 값을 수정하려면 단순히 해당 키에 새로운 값을 할당하면 된다.
student = {'이름': '홍길동', '나이': 20, '전공': '컴퓨터공학'}
# 나이 수정
student['나이'] = 50
print(student) # {'이름': '홍길동', '나이': 50, '전공': '컴퓨터공학'}
새로운 키-값 쌍 추가하기
딕셔너리는 변경 가능한 객체이기 때문에 항목을 추가하거나 삭제하는 것이 가능하다. 존재하지 않는 키에 값을 할당하면 새로운 키-값 쌍이 추가된다. (존재하는 키에 값을 할당하면 수정이 됨)
student = {'이름': '홍길동', '나이': 21, '전공': '컴퓨터공학'}
# 성별 추가
student['성별'] = '남자'
print(student) # {'이름': '홍길동', '나이': 21, '전공': '컴퓨터공학', '성별': '남자'}
키-값 쌍 삭제하기
del 키워드나 pop() 메서드를 사용하여 키-값 쌍을 삭제할 수 있다. del 키워드는 단순히 해당 키에 해당하는 쌍을 삭제하기만 하지만, pop() 메서드는 삭제한 값을 반환까지 한다는 점에 차이가 있다.
student = {'이름': '홍길동', '나이': 21, '전공': '컴퓨터공학', '성별': '남자'}
# del 키워드 사용
del student['성별']
print(student) # {'이름': '홍길동', '나이': 21, '전공': '컴퓨터공학'}
# pop() 메서드 사용
age = student.pop('나이')
print(age) # 21
print(student) # {'이름': '홍길동', '전공': '컴퓨터공학'}
모든 항목을 삭제하려면 clear()을 사용한다.
student.clear()
print(student) # {}
항목 순회하기
딕셔너리에 저장된 항목을 순차적으로 순회하려면 for 문을 사용하면 된다. 딕셔너리의 모든 요소를 순회하면서 처리하는 방법에는 여러 가지가 있는데 순차적으로 살펴보자.
키를 기준으로 순회하기
기본적으로 딕셔너리에 for 문을 적용했을 때 키값을 순회한다. 키에 해당하는 값에 접근하려면 대괄호를 사용해서 접근하면 된다.
student = {'이름': '홍길동', '전공': '컴퓨터공학', '나이': 21}
for key in student:
print(f"{key}: {student[key]}")
"""
이름: 홍길동
전공: 컴퓨터공학
나이: 21
"""
키와 값을 동시에 순회하기
items() 메서드를 사용하면 키와 값을 동시에 순회할 수 있다. 이렇게 하면 값에 접근하기 위해 따로 대괄호하지 않아도 되게 된다.
student = {'이름': '홍길동', '전공': '컴퓨터공학', '나이': 21}
for key, value in student.items():
print(f"{key}: {value}")
"""
이름: 홍길동
전공: 컴퓨터공학
나이: 21
"""
값만 순회하기
values() 메서드를 사용하면 값만 순회할 수 있다.
student = {'이름': '홍길동', '전공': '컴퓨터공학', '나이': 21}
for value in student.values():
print(value)
"""
홍길동
컴퓨터공학
21
"""
딕셔너리 컴프리헨션 (dictionary comprehension)
리스트 컴프리헨션과 유사하게, 딕셔너리 컴프리헨션을 사용하여 간결하게 딕셔너리를 생성할 수 있다.
# 키와 값의 제곱을 저장하는 딕셔너리 생성
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
정리
앞서 살펴본 딕셔너리의 특징을 요약해 보면 다음과 같다:
- 인덱스를 사용하여 요소에 접근할 수 없다. 또한 파이썬 3.7 이전에는 입력 순서가 유지되지 않았으나 3.7 버전부터는 입력한 순서가 유지된다.
- 각 요소는 키와 값의 쌍으로 구성된다. 키는 고유한 값이어야 하며, 값은 중복되어도 상관 없다. 키는 주로 문자열이나 숫자를 사용하며, 값에는 어떠한 데이터 타입도 사용할 수 있다.
- 변경 가능한 자료구조로, 요소를 추가, 삭제, 수정하는 등의 작업이 가능하다.
파이썬의 딕셔너리는 키-값 쌍으로 데이터를 효율적으로 저장하고 빠르게 접근할 수 있는 강력한 자료구조다. 데이터 매핑, 카운팅, 설정 관리 등 다양한 분야에서 유용하게 활용할 수 있다. 딕셔너리의 기본 개념과 주요 메서드를 잘 이해하고, 상황에 맞게 적절히 활용하면 보다 깔끔하고 효율적인 파이썬 코드를 작성할 수 있을 것이다.
그럼 20000
'Language > Python' 카테고리의 다른 글
[Python] 객체지향 프로그래밍(OOP) 이해하기 (1) | 2025.01.20 |
---|---|
[Python] 파이썬의 언패킹 연산자 (0) | 2025.01.20 |
[Python] 파이썬 세트(set) 자료구조 이해하기 (0) | 2025.01.18 |
[Python] 파이썬 튜플 이해하기 (1) | 2025.01.17 |
[Python] 파이썬 2차원 리스트 (생성, 접근, 활용) (0) | 2025.01.17 |