02-5 딕셔너리 자료형
`[추천 동영상 강의]` : [https://www.youtube.com/watch?v=BmXDox6ZFzo](https://www.youtube.com/watch?v=BmXDo…
wikidocs.net
다음은 기본 딕셔너리의 모습이다.
{Key1:Value1, Key2:Value2, Key3:Value3, ...}
각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,)로 구분되어 있다.
위에서 Key는 각각 'key1', 'key2', 'key3'...이고, 각각의 Key에 해당하는 Value는 'value1', 'value2', 'value3'이 된다.
딕셔너리 dic의 정보
key : value
key1 | value1 |
key2 | value2 |
key3 | value3 |
또한 다음 예처럼 Value에 리스트도 넣을 수 있다.
>>> dic = { 'key1': [1,2,3]}//key1이라는 문자열을 key로 설정하였다.
//[1,2,3]이라는 리스트를 key1이라는 키의 요소로 하였다.
딕셔너리 선언 방법
#빈 딕셔너리 선언하기
>>>my_dictionary = {}
>>>print(my_dictionary)
{}
#type() 함수를 통해 자료형을 확인하기
>>>print(type(my_dictionary))
<class 'dict'>
딕셔너리 요소(key : value쌍) 추가하기
>>> a = {1: 'a'}//딕셔너리에 key-value쌍을 추가하는 방법 01
>>> a[2] = 'b'//딕셔너리에 key-value쌍을 추가하는 방법 02
>>> a
{1: 'a', 2: 'b'}
딕셔너리 요소(key : value 쌍) 삭제하기
>>> del a[1]
>>> a
{2: 'b'}
딕셔너리에서 Key 사용해 Value 얻기 (Key를 이용해 Value에 접근)
방법1. key와 [ ] 이용
>>> 성적 = {'김아무개': 95, '박아무개': 100}
>>> 성적['김아무개']
10
>>> 성적['박아무개']
99
리스트나 튜플, 문자열은 요솟값을 얻고자 할 때 인덱싱이나 슬라이싱 기법 중 하나를 사용했다. 하지만 딕셔너리는 단 한 가지 방법뿐이다. 바로 Key와 [ ] 를 사용해서 Value에 접근하는 방법이다.
어떤 Key의 Value를 얻기 위해서는 딕셔너리변수이름 [Key]를 사용한다.
방법2. 함수 .get(키이름) 이용
>>> a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'010-9999-1234'
딕셔너리 관련 함수들 :
.keys() | 키(key)들만 뽑아내기 ( dick_keys객체에 key들을 리스트처럼 넣어서 리턴) |
.values() | value들만 뽑아내기 (dick_values객체에 value들을 리스트처럼 넣어서 리턴) |
.items() | 요소(key:value쌍)들 전부 뽑아내기 ( dick_items 객체에 item들을 리스트처럼 넣어서 리턴) |
.clear() | 딕셔너리를 초기상태 { }로 초기화, 전부 삭제한다. |
키 in 딕셔너리 | 해당 키(Key)가 해당 딕셔너리에 있는지 없는지를 확인한다(이미 있으면 True 없으면 False를 리턴) |
키(key)만 뽑아 내기 - .keys()
>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
ㄴ 딕셔너리 변수 이름.keys()는 딕셔너리 a의 Key만을 모아서 dict_keys 객체를 리턴한다.
dict_keys 객체는 리스트 고유의 append, insert, pop, remove, sort 함수는 수행할 수 없다.
#dict_keys 반복문 사용예시
>>> for k in a.keys():
... print(k)
...
name
phone
birth
Value만 뽑아내기 - .values()
>>> a.values()
dict_values(['pey', '010-9999-1234', '1118'])
values 함수를 호출하면 dict_values 객체를 돌려준다.
Key, Value 순서쌍(ordered pair) 뽑아내기 - .items()
>>> a.items()
dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])
items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.
딕셔너리 초기화 하기 - .clear()
>>> a.clear()
>>> a
{}
clear 함수는 딕셔너리 안의 모든 요소를 삭제한다.
ㄴ싹 비워서 초기상태 , { } 이상태로 만든다
ㄴ빈 리스트를 [ ], 빈 튜플을 ( )로 표현하는 것과 마찬가지로 빈 딕셔너리도 { }로 표현한다.
해당 Key가 딕셔너리 안에 있는지 조사하기 - 방법 1 키이름 in 딕셔너리 변수 이름
- 방법 2 .has_key(키)
- 방법 3 .get()
방법 1. 키 이름 in 딕셔너리 변수 이름
>>> a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False
키 이름 in 딕셔너리 변수이름 함수를 호출하면, 그 키가 딕셔너리에 실제로 있는 키인지 아닌지에 따라 참(True)또는 거짓(False)을 리턴한다.
2 has_key()
3 .get()
ㄴ get()은 키를 이용하여, 그 키에 해당하는 값(Value)을 반환하는 함수이지만, get(키)일 때, 그 '키'가 해당 딕셔너리에 아직 없다면, None을 반환한다.
ㄴ이때, None대신에 다른걸 리턴하게 설정할 수도 있다.
-> 딕셔너리 변수 이름.get(키a, 0)
이렇게 하면, 키a가 해당 딕셔너리의 안에 없을 때, None 대신에 0을 리턴하게 된다.
-> 키(key)가 이미 딕셔너리에 있는지 아닌지를 검사하고 없다면(False) 키(Key)와 값(Value)을 추가하고, 이미 있다면 그 키(Key)에 해당하는 값(Value)의 값을 +1증가시키면 "asdffsdf"안에 a가 몇 번나오고, b가 몇 번 나오고... 이런식으로 문자열안에 각 알파벳이 몇 번씩 나왔는지, 어떤것들이 나왔는지를 알 수 있다.
(in을 활용하여 나온 알파벳을 확인하고 개수를 센다.
그리고 키를 통한 딕셔너리 값에 접근하기로 각 알파벳이 몇 번씩 등장했는지 알 수 있다.
그리고 키 뽑아내기로 어떤 알파벳들이 등장한 적 있는지만도 알 수 있다.)
ex_) https://www.acmicpc.net/problem/1159
1159번: 농구 경기
상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작
www.acmicpc.net