딕셔너리
- 리스트와 유사하지만 오프셋으로 항목에 접근하지 않고, 키key를 이용하여 접근
- 키는 보통 문자열을 사용하지만, 변경 불가능한 다른 타입(부울, 정수, 부동소수점수, 튜플 등) 을 사용할 수 있음
- 하나의 딕셔너리 내에서 키 값을은 중복 불가능
- 키에 대응하는 값은 어떤 타입이라도 가능하며 중복된 값도 가능
- 딕셔너리는 변경 가능한 타입으로 키-값 요소의 추가, 삭제, 수정이 가능
딕셔너리 생성
비어 있는 딕셔너리는 다음과 같이 생성한다.
>>> d1 = {}
>>> d1
{}
>>> d2 = dict()
>>> d2
{}
값을 넣고 싶을 때 다음과 같이 작성한다.
>>> d3 = {
'apple' : '사과',
'banana' : '바나나',
'cherry' : '체리'
}
>>> d3
{'apple': '사과', 'banana': '바나나', 'cherry': '체리'}
딕셔너리는 (맨 처음에 설명하였듯이) 키 값은 중복 불가능하다. 따라서 아래와 같이 작성하면 맨 마지막에 입력한 키값만 적용된다. 무슨 말인지 다음 예시를 보면 알 수 있다.
>>> d4 = {'a':1, 'b':2, 'a':3}
>>> d4
{'a': 3, 'b': 2}
딕셔너리로 변환
dict() 함수를 사용하여 두 값으로 이루어진(길이가 2인) 시퀀스 갖는 시퀸스를 딕셔너리로 변환 가능
(길이가 항상 2여야 한다)
>>> seq1 = [['a',1], ['b',2], ['c', 3]]
>>> dict(seq1)
{'a': 1, 'b': 2, 'c': 3}
>>> seq2 = [(1, 10), (2, 20), (3, 30)]
>>> dict(seq2)
{1: 10, 2: 20, 3: 30}
>>> seq3 = ('ab', 'cd', 'ef')
>>> dict(seq3)
{'a': 'b', 'c': 'd', 'e': 'f'}
항목 접근/추가/변경
항목에 접근하기: [key]
항목에 키가 없다면 오류를 출력한다.
>>> d= {
'apple' : '사과',
'banana' : '바나나',
'cherry' : '체리'
}
>>> d['apple']
'사과'
>>> d['cat']
Traceback (most recent call last):
File "<pyshell#191>", line 1, in <module>
d['cat']
KeyError: 'cat'
항목에 접근하기: get() 메서드
>>> d= {
'apple' : '사과',
'banana' : '바나나',
'cherry' : '체리'
}
>>> d.get('apple')
'사과'
>>> d.get('cat') #아무것도 표시되지 않지만 실제로는 None이 반환
>>> d.get('cat','고양이')
'고양이'
>>> d.get('apple', '맛있는 사과')
'사과'
#만약 apple 키가 없다면 '맛있는 사과' 가 나오겠지만 선언시 키와 값이 이미 있기 때문에 이미 있는 값으로 출력된다
항목 추가/변경하기: [key]
>>> d= {
'apple' : '사과',
'banana' : '바나나',
'cherry' : '체리'
}
>>> d['pear'] = '배'
>>> d
{'apple': '사과', 'banana': '바나나', 'cherry': '체리', 'pear': '배'}
>>> d['apple'] = '맛있는 사과'
>>> d
{'apple': '맛있는 사과', 'banana': '바나나', 'cherry': '체리', 'pear': '배'}
딕셔너리 결합/갱신
update() 메서드는 딕셔너리의 값을 갱신 및 결합
>>> d1 = {'apple' : '사과' , 'banana' : '바나나'}
>>> d2 = {'apple' : '맛있는 사과', 'cherry' : '체리'}
>>> d1.update(d2)
>>> d1
{'apple': '맛있는 사과', 'banana': '바나나', 'cherry': '체리'}
항목 삭제
key와 del로 항목 삭제
>>> square = {1:1, 2:4, 3:9, 4:16}
>>> square
{1: 1, 2: 4, 3: 9, 4: 16}
>>> del square[1]
>>> square
{2: 4, 3: 9, 4: 16}
모든 항목 삭제
clear() 메서드를 사용하거나 빈 딕셔너리 ({})를 할당
>>> square.clear()
>>> square
{}
>>> square = {}
>>> square
{}
멤버쉽 테스트
딕셔너리에 키가 존재하는지 알고 싶을 경우 in 연산자를 사용
>>> d = {'apple' : '사과' , 'banana' : '바나나', 'cherry' : '체리'}
>>> 'apple' in d
True
>>> '사과' in d
False
>>> 'cat' in d
False
키와 값 다루기
모든 키 얻기
key() 메서드를 사용하면 딕셔너리에 있는 모든 키를 가져옴
>>> color_codes = {'red':'R', 'green' : 'G' , 'blue' :'B'}
>>> color_codes.keys()
dict_keys(['red', 'green', 'blue'])
모든 값 얻기
values() 메서드를 사용하면 딕셔너리에 있는 모든 값을 가져옴
>>> color_codes = {'red':'R', 'green' : 'G' , 'blue' :'B'}
>>> color_codes.values()
dict_values(['R', 'G', 'B'])
모든 쌍의 키-값 얻기
items() 메서드를 사용하면 딕셔너리에 있는 모든 키-값의 쌍을 가져옴
>>> color_codes = {'red':'R', 'green' : 'G' , 'blue' :'B'}
>>> color_codes.items()
dict_items([('red', 'R'), ('green', 'G'), ('blue', 'B')])
할당, 복사
딕셔너리도 리스트와 마찬가지로 대입연산자로 할당을 할 경우 객체의 참조가 복사되기 때문에 같은 객체를 공유하게 된다.
>>> d1 = {'a':1, 'b':2}
>>> d2 =d1
>>> d2['a'] =3
>>> d1
{'a': 3, 'b': 2}
객체를 복사하기 위해서는 copy()메서드 또는 dict() 함수를 사용
>>> d1 = {'a': 1, 'b':2}
>>> d2 = d1.copy()
>>> d2['a'] = 3
>>> d1
{'a': 1, 'b': 2}
>>> d1 = {'a': 1, 'b':2}
>>> d2 = dict(d1)
>>> d2['a'] = 3
>>> d1
{'a': 1, 'b': 2}
Problems
빈 딕셔너리 d를 생성
>>> d = {}
>>> d = dict()
다음 중 딕셔너리의 키 값이 될 수 없는 것을 골라라
1 , True , ('a','b','c'), 'python' , [1,2,3] , {'a': 1 ,'b':2}
key값은 변경 불가능한 값으로 써야하는데 변경가능한 리스트, 딕셔너리는 사용할 수 없다.
다음과 같이 딕셔너리가 있을 때, 딕셔너리의 모든 키값을 출력하되 내림차순으로 정렬하여 출력
>>> d = {'red':'R', 'green' : 'G' , 'blue' :'B'}
>>> keys = d.keys()
>>> reversed = sorted(keys, reverse=True)
>>> print(', ' .join(reversed))
red, green, blue
Summary
- 딕셔너리는 키-값 으로 쌍으로 자료를 저장하는 데이터 타입이다.
- 키 값으로는 불변 타입을 사용할 수 있으며, 일반적으로 문자열을 사용한다.
- 하나의 딕셔너리 내에 키 값은 유일해야 한다.
- 딕셔너리의 키에 대응하는 값은 어떤 데이터 타입도 가능하다.
- 딕셔너리의 특정 항목에 접근하려 할 경우 [key] 연산을 사용한다.
- [key] 연산으로 딕셔너리에 없는 key 값의 항목을 읽을 경우, 예외가 발생한다.
- 딕셔너리의 특정 key로 값을 추가하거나 변경할 경우에도 [key] 연산을 사용한다. 이 경우 딕셔너리에 key값이 없을 경우 예외가 발생하지 않고 key가 추가된다.
- 파이썬에는 딕셔너리를 다루기 위한 다양한 연산자와 메서드 및 함수가 제공된다.
- 딕셔너리도 대입 연산자를 사용하면 기본적으로 객체의 참조가 할당되며, 복사본을 할당하기 위해서는 copy() 메서드 또는 dict()함수를 사용한다.
'Language > Python' 카테고리의 다른 글
[Python] Ch4 - part 1. 조건문 (0) | 2021.03.28 |
---|---|
[Python] Ch3 - part 3. 셋 (0) | 2021.03.27 |
[Python] Ch3 - part 1.리스트와 튜플 (0) | 2021.03.25 |
[Python] Ch2 - part 4. 논리 (Boolean) (0) | 2021.03.25 |
[Python] Ch2 - part 3. 문자열 (0) | 2021.03.25 |