이번 포스팅에서는 딕셔너리(dictionary)를 다룬다. 딕셔너리는 앞서 다뤘던 리스트와 튜플과는 많이 다른 모습이다.
딕셔너리는 키(key)와 값(value)이 한 쌍으로 이루어져 있는 자료형이다.
리스트와 튜플은 순차적으로 요소 값을 찾는 반면, 딕셔너리는 key를 찾아서 value를 찾는다.
딕셔너리 만들기 - 딕셔너리란? & Key, Value
딕셔너리는 key와 value의 쌍으로 이루어진 자료형이다. 다음 그림으로 딕셔너리가 어떤 자료형인지 맛만 보고 예시 코드를 살펴보자.
딕셔너리 만들기
>>> a = {'Name': 'Mike', 'Age': 29, 'City': 'New York'}
>>> a = {1: 'one', 2:'two', 3:'three'} # 숫자를 key로 딕셔너리 생성
>>> a = {} # 빈 딕셔너리 만들기
>>> a = dict() # 빈 딕셔너리 만들기
>>> type(a)
<class 'dict'>
딕셔너리는 중괄호{}로 둘러싸서 만든다. {key1:value1, key2: value2, key3:value3, ...} 이런 형태로 키(key)와 값(value)이 한쌍을 이뤄 요소 값으로 존재한다.
키는 문자가 될 수도 있고, 숫자가 될 수도 있다. 세 번째와 마지막 코드처럼 빈 딕셔너리를 만들 수 도 있다.
딕셔너리를 생성할 때 유념해야 할 점은 하나의 딕셔너리 안에 중복되는 키가 존재해서는 안 된다는 것이다.
키는 고유한 값을 가져야 한다.
>>> a = {'Name': 'Mike', 'Age': 29, 'Age': 30} # 'Age' 키가 중복되어 입력
>>> a
{'Name': 'Mike', 'Age': 30}
위 코드를 보자. 키 'Age'가 중복되어 뒤에 입력됐는데, 딕셔너리를 출력해보면 'Age': 30 만 딕셔너리에 포함되고 먼저 입력한 'Age': 29는 누락되어 하나의 'Age' 키만 남았다.
딕셔너리는 고유한 키를 찾아 값을 반환하기 때문에 같은 키가 여러 개로 중복되어 있으면 안 된다.
한국인이 고유한 주민등록번호로 개인을 식별할 수 있듯이 딕셔너리는 키가 그 역할을 한다.
>>> age = {'Mike': 23, 'Bob': 29, 'David': 23} # value는 중복되도 상관 없음
value는 중복되어도 괜찮다. 주민등록번호가 달라도 이름은 같을 수가 있다. value는 이름이다. 주민등록번호가 같을 순 없지만 동명이인은 얼마든지 존재할 수 있는 것이다. 중요한 건 key다.
>>> sports = {'Mike': 'Football', 'David': 'Baseball', 'Sarah': ['Tennis', 'Baseball']}
위 예시는 누가 어떤 스포츠르 잘하는 지를 딕셔너리로 표현한 것이다. Mike는 미식축구, David는 야구, Sarah는 테니스와 야구를 잘한다. Sarah가 잘하는 스포츠가 두 개인 것처럼 딕셔너리의 값은 리스트가 될 수 있다.
>>> dict_list = {[1, 2]: 'list'} # 리스트는 키가 될 수 없음
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> dict_tuple = {(1, 2): 'tuple'} # 튜플은 키로 사용 가능
value에 리스트를 사용할 수 있지만, 키에는 리스트를 사용할 수 없다. 반면 튜플은 키로 사용할 수가 있다.
그 이유는 리스트는 수정할 수 있는 자료형인 반면에 튜플은 수정할 수 없기 때문이다. key의 값이 중복되면 안 되고 매우 중요한 값이기 때문에, 수정이 가능한 리스트는 사용하지 못하게 한 듯하다.
딕셔너리 요소값 추가 & 수정 & 삭제
딕셔너리 key&value 쌍 추가하기
>> age = {'Mike': 23, 'Bob': 29, 'David': 25}
>>> age['Sarah'] = 32 # 'Sarah'라는 key에 value 32 입력하여 딕셔너리에 추가
>>> age
{'Mike': 23, 'Bob': 29, 'David': 25, 'Sarah': 32}
위 코드와 같이 변수명['새 key'] = value 형태로 딕셔너리의 키와 값 한쌍을 추가할 수 있다.
딕셔너리 값 수정하기
>>> age
{'Mike': 23, 'Bob': 29, 'David': 25, 'Sarah': 32}
>>> age[0] = 24 # 첫 번째 요소값 수정 시도
>>> age
{'Mike': 23, 'Bob': 29, 'David': 25, 'Sarah': 32, 0: 24}
Mike의 생일이 지나서 Mike의 나이를 23에서 24로 바꾸려고 한다. 첫 번째 요소인 Mike의 나이를 23에서 24로 수정하려고 age[0] = 24를 입력했더니 key가 0이고 값이 24인 딕셔너리 쌍이 추가되었다. Mike의 나이는 수정이 안 되고 새로운 키와 값이 추가된 것이다.
여기서 헷갈리면 안 된다. 딕셔너리에서 대괄호는 리스트와 튜플의 인덱싱과 다르다. 딕셔너리의 대괄호는 순번을 나타내는 인덱스가 아니라 키를 의미한다.
>>> age['Mike'] = 24 # 대괄호 안에 키값을 넣고 수정한다.
>>> age
{'Mike': 24, 'Bob': 29, 'David': 25, 'Sarah': 32}
해당 키의 요소값을 바꾸려면 대괄호 안에 키값을 넣고 값을 수정해줘야 한다.
딕셔너리 요소 값 삭제하기
>>> del age['Mike'] # Key 'Mike' 삭제
>>> age
{'Bob': 29, 'David': 25, 'Sarah': 32}
딕셔너리의 요소 값 삭제는 리스트와 동일하게 del 함수를 이용한다.
Key를 통해 Value 값 얻기
Key값을 통해 Value 값 얻기
>>> age = {'Mike': 23, 'Bob': 29, 'David': 25}
>>> age['Mike'] # Key 'Mike'를 통해 value값 얻기
23
>>> age['David'] # Key 'David'를 통해 value값 얻기
25
앞의 글에서 다룬 문자열, 리스트, 튜플은 요소값을 얻기 위해 인덱싱과 슬라이싱을 사용했다. 하지만 딕셔너리는 인덱싱과 슬라이싱 개념이 없다. 딕셔너리에서는 오로지 Key를 통해서 Value에 접근할 수 있다.
위 코드를 보자. 변수명[Key] 형태로 age['Mike']을 입력하니 'Mike'에 해당하는 요소값이 출력되었다.
'파이썬 > 기초 문법' 카테고리의 다른 글
[파이썬]set 자료형 만들기 및 집합의 특성 (0) | 2022.10.03 |
---|---|
[파이썬]딕셔너리 함수들 - keys, values, items, clear, get, in (0) | 2022.10.03 |
[파이썬]튜플 이해하기 - 특성, 인덱싱, 슬라이싱, 연산 (0) | 2022.10.02 |
[파이썬]리스트의 정렬, 카운트, 위치찾기 (1) | 2022.10.01 |
[파이썬]리스트 요소값 추가와 삭제하기 (1) | 2022.09.30 |
댓글