공부 기록장
딕셔너리 자료형 본문
1. 딕셔너리란?
단어 그대로 '사전'의 의미를 갖는다.
Key를 통해 Value를 얻을 수 있는 자료형이다.
2. 딕셔너리를 만드는 방법
dic = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
dic2 = {1: 'hi'}
dic3 = {'a': [1, 2, 3]}
3. 딕셔너리 쌍 추가 / 삭제
# 추가
>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a
{1: 'a', 2: 'b'}
>>> a['name'] = 'pey'
>>> a
{1: 'a', 2: 'b', 'name': 'pey'}
>>> a[3] = [1, 2, 3]
>>> a
{1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}
# 삭제
>>> del a[1]
>>> a
{2: 'b', 'name': 'pey', 3: [1, 2, 3]}
4. 딕셔너리 활용
1) key를 통해 value 얻기
>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99
>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a[2]
'b'
딕셔너리 변수에서 [] 안의 숫자 1은 두 번째 요소를 나타내는 것이 아니라
Key에 해당하는 1을 나타낸다.
딕셔너리는 리스트나 튜플에 있는 인덱싱 방법을 적용할 수 없다.
5. 딕셔너리 만들 때 주의사항
1) 중복 키 존재 불가
>>> a = {1:'a', 1:'b'}
>>> a
{1: 'b'}
2) key에 리스트 사용 불가, 튜플 사용 가능
>>> a = {[1,2] : 'hi'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
딕셔너리의 key로 쓸 수 있는지의 여부는
key가 변하는 값(mutable)인지, 변하지 않는 값(immutable)인지에 따라 결정된다.
리스트는 mutable하기 때문에 key로 사용이 불가능하고,
튜플은 immutable하기 떄문에 key로 사용 가능하다.
6. 딕셔너리 관련 함수
딕셔너리를 자유자재로 사용하기 위해서는, 딕셔너리가 자체적으로 가지고 있는 함수들을 잘 알고 있어야 한다!
1) a.keys()
딕셔너리 a의 key만을 모아 dict_keys객체를 리턴한다
>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
리턴값으로 리스트가 필요한 경우에는
list(a.keys())
와 같이 list 함수로 변환해서 사용해야 한다.
2) a.values()
딕셔너리 a의 value만을 모아 dict_values 객체를 리턴한다
>>> a.values()
dict_values(['pey', '010-9999-1234', '1118'])
dict_values 객체를 리턴하기 때문에 리스트로 사용하고자 할 때에는
list() 함수를 사용해 변환해 주어야 한다.
3) a.items()
딕셔너리 a의 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 리턴한다.
>>> a.items()
dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])
√ dict_keys, dict_values, dict_items 객체는 리스트로 변환하지 않더라도 기본적인 반복 구문에서 사용할 수 있다.
4) a.clear()
clear 함수는 딕셔너리 안의 모든 요소를 삭제한다.
>>> a.clear()
>>> a
{}
5) a.get(KEY)
KEY에 대응되는 value값을 리턴한다.
>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'010-9999-1234'
a.get('name')은 a['name']을 사용했을 때와 동일한 결괏값을 리턴한다.
다만 이 둘의 차이점이라 함은,
>>> a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> print(a.get('nokey'))
None
>>> print(a['nokey’])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'nokey'
위 코드에서 볼 수 있듯이,
key에 해당하는 값이 없을 때,
a.get(KEY) 함수는 None을 리턴하고
a[KEY] 방식은 KeyError를 발생시킨다.
key에 해당하는 값이 없을 때,
미리 정해둔 디폴트 값을 대신 가져오게 하고 싶은 경우에는
인자로 디폴트 값을 넣어줄 수 있다.
>>> a.get('nokey', 'foo')
'foo'
6) in 키워드
in 키워드를 통해 특정 Key가 딕셔너리 안에 있는지 조사할 수 있다.
>>> a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False
해당 key값이 존재하는 경우에는 True를
존재하지 않는 경우에는 False를 반환한다.
참고 자료
'코딩 테스트 > 정리 및 복습' 카테고리의 다른 글
전역 변수와 지역 변수 (1) | 2024.03.22 |
---|---|
임의의 최대값 최소값 (0) | 2024.03.22 |
완전 탐색과 백트래킹 (0) | 2024.03.21 |
input() vs sys.stdin.readline() (0) | 2024.03.20 |
코딩 테스트 문제 유형 파악하기 (1) | 2024.03.20 |