반응형
딕셔너리(Dictionary)란?
- 키(Key)와 밸류(Value)라는 1:1 대응 관계를 한 쌍으로 갖는 사전형 자료형태로, 이를 연관 배열(Associative array) 또는 해시(Hash)라고 한다.
- 키값은 중복이 불가능하고 절대로 변하지 않지만, 벨류값은 중복이 가능하고 수정도 가능하다.
- 리스트나 튜플은 순차적(sequential)이지만, 딕셔너리는 순차적이지 않아서 인덱스가 없고 그래서 인덱싱 대신 Key를 통해 Value를 얻는다.
딕셔너리 만드는 법
- 각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,) 로 구분되어 있다.
>>> a = dict() # 빈 딕셔너리 생성
>>> b = {}
>>> c = {1: 'hi'} # 키값 숫자, 벨류값 문자열
>>> d = {'a': [1,2,3]} # 키값 문자열, 벨류값 리스트
>>> dic = {'name':'pey' # 키값 문자열, 벨류값 문자열
, 'phone':'0119993323'
, 'birth': '1118'}
>>> e = {(1,2) : 'hi'} # 키값으로 튜플 가능 - 변하지 않는 값
>>> f = {[1,2] : 'hi'} # 키값으로 리스트는 쓸 수 없다 - 변하는 값
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
딕셔너리 요소 추가
>>> a = {1: 'a'}
>>> a[2] = 'b' # 키와 벨류값이 각각 2이고 b인 한 쌍 추가
>>> a[3] = [1, 2, 3]
>>> a
{1: 'a', 2: 'b', 3: [1, 2, 3]}
딕셔너리 요소 삭제
>>> del a[1] # del 함수를 사용해서 del a[key]처럼 입력하면
>>> a # 지정한 key에 해당하는 {key : value} 쌍이 삭제
{2: 'b', 3: [1, 2, 3]}
딕셔너리에서 키값으로 벨류값 찾기
- 딕셔너리 Key는 고유값이므로 중복되면 하나를 제외한 나머지 것들이 모두 무시된다.
# Key 사용해 Value 얻기
>>> a = {1:'a', 2:'b'}
>>> a[1] # a[1]이 의미하는 것은 리스트나 튜플의 a[1]과는 전혀 다름
'a' # 딕셔너리[ ] 안 숫자 1은 두 번째 요소가 아니라 Key값이 1
>>> a[2]
'b'
# Key값이 중복될 때, 하나를 제외한 나머지 것들이 모두 무시된다
>>> a = {1:'a', 1:'b'}
>>> a
{1: 'b'}
딕셔너리 관련 함수들
- Key 값 리스트 만들기(keys)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys() # 키값만모아 dict_keys객체 리턴
dict_keys(['name', 'phone', 'birth']) # 리스트를 사용하는 것과 차이 없음
# dict_keys와 dict_values는 리스트처럼 쓸 수 있으나
# 리스트 고유 함수 쓸 수 없어서 리스트로 변환 필요
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> list(a.keys())
['name', 'phone', 'birth']
- Value 값 리스트 만들기(values)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.values() # 벨류만모아 dict_values객체 리턴
dict_values(['pey', '0119993323', '1118']) # 리스트 사용과 동일하게 사용 가능
- Key, Value 쌍 얻기(items)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.items() # dict_items 객체로 돌려줌
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])
- Key: Value 쌍 모두 지우기(clear)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.clear() # 딕셔너리 안의 모든 요소를 삭제
>>> a
{} # {}는 빈 딕셔너리 표현
- Key로 Value얻기(get)
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> a.get('name') # x라는 key에 대응되는 value 값
'pey' # a.get('name')은 a['name']와 동일한 결과
# 딕셔너리에 없는 키 대신 미리 정해 둔 디폴트 값 가져오게 하고 싶을 때
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.get('foo', 'bar') # get(x, '디폴트 값')
'bar'
# 딕셔너리에 없는 키로 값을 가져오려고 할 경우
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> print(a.get('nokey')) # a.get('nokey')는 None을 리턴
None # None은 "거짓"이라는 뜻
>>> print(a['nokey']) # a['nokey']는 Key 오류를 발생
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'nokey'
- 있으면 해당 밸류를 출력하고 없으면 뒤에 있는 값 출력(setdefault)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.setdefault('Apple', '없음')
없음
- 해당 Key가 딕셔너리 안에 있는지 조사하기(in)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> 'name' in a # 딕셔너리 a에 name 키값이 있으면 True
True
>>> 'email' in a # 딕셔너리 a에 name 키값이 없으면 False
Reference
반응형
'Data > Python' 카테고리의 다른 글
[Python] 파이썬 제어문 - If, elif, 조건부 표현식 (0) | 2023.06.17 |
---|---|
[Python] 파이썬 집합 자료형 - 교집합, 합집합, 차집합, 함수들 (0) | 2023.06.17 |
[Python] 파이썬 튜플 자료형 - 인덱싱, 슬라이싱 (0) | 2023.06.17 |
[Python] 파이썬 리스트 자료형 - 연산, 인덱싱, 슬라이싱, 함수들 (0) | 2023.06.17 |
[Python] 파이썬 불리언 자료형 - 참과 거짓, 예시, 함수 (0) | 2023.06.17 |