티스토리 뷰
<목차>
1. 딕셔너리 (dictionary)
딕셔너리는 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형
- 데이터가 순서와 상관 없이 저장된다.
- 키는 항상 고유해야한다.
- 매핑 타입이다. (시퀀스 타입 X)
data = dict()
data['지수'] = 'JISOO'
data['제니'] = 'JENNIE'
data['로제'] = 'ROSE'
data['리사'] = 'LISA'
print(data) # {'지수': 'JISOO', '제니': 'JENNIE', '로제': 'ROSE', '리사': 'LISA'}
파이썬의 사전 자료형은 내부적으로 '해시 테이블(Hash Table)'을 이용하므로 기본적으로 데이터의 검색 및 수정에 있어서 O(1)의 시간에 처리할 수 있다는 장점을 갖는다.
-> 키-값 쌍으로 구성된 데이터를 처리함에 있어서 리스트보다 훨씬 빠르게 동작한다.
2. 생성하기
2-1. { }
2-2. dict()
2-3. 딕셔너리로 변환하기
dict() 함수를 사용하여 두 값으로 이루어진 시퀀스를 딕셔너리로 변환할 수 있다.
3. 항목 추가 및 변경
키에 참조되는 항목에 값을 할당하면 된다.
- 이미 존재하는 키라면 그 값을 새 값으로 대체한다.
- 키가 존재하지 않는다면 새 키와 값이 딕셔너리에 추가된다.
4. 항목 얻기
4-1. [key]
- 딕셔너리에 키가 없으면 예회가 발생하므로 이를 처리해줘야한다.
-> 멤버십함수인 in을 이용한다.
키 멤버십 테스트 : in
4-2. get()
- 키가 존재하지 않으면 지정한 옵션값을 출력한다.
- 옵션을 지정하지 않는다면 None을 출력한다.
4-3. keys()
딕셔너리의 모든 키를 가져온다.
- 파이썬2에서는 리스트를 반환한다.
- 파이썬3에서는 순회 가능한(iterable) 키들을 보여주는 dict_keys()를 반환한다.
-> 사용되지 않을 리스트를 생성하고 저장하기 위한 메모리와 시간을 소비하지 않기 때문에 아주 큰 딕셔너리에 유용하다.
-> 리스트로 사용하고 싶을 때는 list() 함수를 이용한다.
-> values(), ites() 함수 모두 마찬가지이다.
4-4. values()
딕셔너리의 모든 값을 가져온다.
4-5. items()
딕셔너리의 모든 키-값을 가져온다.
- 각 키와 값은 튜플로 반환된다.
4-6. len()
딕셔너리의 키-값 쌍의 개수를 반환한다.
5. 결합하기
5-1. {**a, **b}
5-2. update()
6. 삭제하기
6-1. del
6-2. pop()
6-3. clear() 와 = {}
딕셔너리에 있는 키-값 쌍을 모두 삭제한다.
7. 키 멤버십 테스트
8. 할당하기
8-1. =
8-2. copy()
8-3. deepcopy()
9. 비교하기
10. 순회하기
11. 딕셔너리 컴프리헨션
11-1. for문
{키_표현식 : 값_표현식 for 표현식 in 순회 가능한 객체}
word = 'letters'
letter_counts = {letter: word.count(letter) for letter in word}
letter_counts
{'l': 1, 'e': 2, 't': 2, 'r': 1, 's': 1}
- 문자열을 set 형식으로 변환하여 적용하면 더 효율적이다.
word = 'letters'
letter_counts = {letter: word.count(letter) for letter in set(word)}
letter_counts
{'l': 1, 't': 2, 's': 1, 'r': 1, 'e': 2}
-> set(word)를 순회하는 것은 문자열 word를 순회하는 것과 다르게 문자를 반환하기 때문에 딕셔너리의 키가 다르게 정렬된다.
11-2. for문 + if문
{키_표현식 : 값_표현식 for 표현식 in 순회 가능한 객체 if 테스트}
vowels = 'aeiou'
word = 'onomatopoeia'
vowel_counts = {letter: word.count(letter) for letter in set(word) if letter in vowels}
vowel_counts
{'o': 4, 'i': 1, 'a': 2, 'e': 1}
사전 자료형에 특정한 원소가 있는지 검사
'원소 in 사전'의 형태를 사용할 수 있다. → 값으로는 찾을 수 없음에 주의하자. (오직 키로만 가능!)
if '리사' in data:
print("'리사'를 키로 가지는 데이터가 존재합니다.")
iterable 자료형 : 파이썬에서 리스트, 문자열, 튜플 등 순차적인 정보를 담는 자료형을 의미한다. in 문법은 이러한 iterable 자료형에 모두 사용이 가능한다.
사전 자료형 관련 함수
keys() 함수 : 키 데이터만 뽑아서 리스트로 만든다.
values() 함수 : 값 데이터만 뽑아서 리스트로 만든다.
key_list = data.keys()
print(key_list) # ['지수', '제니', '로제', '리사']
value_list = data.values()
print(value_list) # ['JISOO', 'JENNIE', 'ROSE', 'LISA']
for key in key_list:
print(data[key])
코딩 테스트>> 학생의 번호가 1부터 10,000,000까지로 구성되어 있는 상황에서 최대 10,000명의 학생을 선택했다고 가정했을 때, 이후에 특정한 학생 번호가 주어졌을 경우 해당 학생이 선택되었는지를 알아야 할 때 사전 자료형을 사용하는 것이 리스트를 사용하는 것 보다 메모리 공간을 더 효율적으로 사용할 수 있다.
Ref.
- 5. Data Structures — Python 3.9.6 documentation
- Built-in Types — Python 3.9.6 documentation
'Python' 카테고리의 다른 글
[Python] Set (집합) (0) | 2020.10.21 |
---|---|
[Python] 주석 - 한줄 주석, 여러줄 주석 (0) | 2020.10.21 |
[Python] 튜플 자료형 - ( , ) (0) | 2020.10.21 |
[Python] 자료형 - 문자열 자료형 (0) | 2020.10.21 |
[Python] 자료형 - 리스트 자료형 (0) | 2020.10.20 |