리스트(list), 튜플(tuple), 집합(set) 자료형에 이어서 오늘은 딕셔너리 (Dictionary), 사전 자료형에 대해 알아본다.
사전의 특징
사전의 특징은 데이터를 저장할 때 구분자를 함께 묶어서 저장해준다는 점이다. 예를 들면 이름과 휴대전화 번호를 매칭해서 저장한다던지, 월별 매출액을 저장한다던지 하는 식이다. 실제로는 이 딕셔너리 형태의 자료구조가 많이 쓰일 것이라는 것을 직감적으로도 알 수 있다.
구분을 위한 데이터의 고유값을 Identifier 또는 Key 라고 한다. 실제로 사용할 때 Key와 그에 해당되는 데이터 Value 쌍으로 묶어서 저장을 해준다.
학번 | 이름 | 생년월일 | 주소 |
21001567 | 김미영 | 2000-05-24 | 서울시 도봉구 |
21041597 | 송하나 | 1999-04-01 | 수원시 영통구 |
21064785 | 최진혜 | 2000-03-17 | 서울시 강남구 |
이런 식으로 개인정보를 저장할 수 있을텐데 여기에서 각 데이터별로 중복되지 않을 확실한 구분값은 바로 학번이다. 즉 학번을 Key 값으로 지정하고 그 Key 값에 데이터 Value 값들을 매칭해서 저장해주면 섞이지 않고 관리할 수 있다.
사전의 선언
사전 자료구조의 선언은 {key:value} 형태로 한다.
## dict 선언
>>> member={1:'mina',2:'jini',3:'jessi'}
>>> member
{1: 'mina', 2: 'jini', 3: 'jessi'}
>>> type(member)
<class 'dict'> ## 타입확인
>>> member[1] ## key 1의 value값 호출
'mina'
>>> member[2] ## key 2의 value값 호출
'jini'
>>> member[3] ## key 3의 value값 호출
'jessi'
선언후 변수 타입을 확인해보면 class ‘dict’로 나오는 것을 확인할 수 있다. 변수명[key] 형태로 해당 key값에 해당하는 value값을 호출할 수 있다.
여기서 [key] 부분은 이전에 리스트나 튜플에서 몇번째 원소 (element)를 지정한 것과는 다른 개념이다. 순서가 아닌, 특정 key 값을 지칭하는 것임을 알아야 한다.
>>> member={(1,):"kkk"} ## key 값에 튜플 사용
>>> member
{(1,): 'kkk'}
>>> member{[1]:"kkk"} ## key 값에 리스트 사용
File "<stdin>", line 1
member{[1]:"kkk"}
^
SyntaxError: invalid syntax ## 에러발생
>>>
딕셔너리에서 중요한 점은 key 값은 불변의 값으로 사용해야만 한다. 따라서 key 값에 튜플 자료구조 형태는 올 수 있으나 리스트 형태는 올 수가 없다. 반면 value 값에는 어떤 형태든지 올 수 있다.
key : value 변경/추가
>>> member={1:'mina',2:'jini',3:'jessi'}
>>> member[1]='mini' ## key 1의 value값 변경
>>> member[1]
'mini'
>>> member={1:'mina',2:'jini',3:'jessi'}
>>> member[4]='sumi' ## key 4 와 value 쌍을 새롭게 추가
>>> member
{1: 'mina', 2: 'jini', 3: 'jessi', 4: 'sumi'}
>>> member[4]=[1,2,3] ## key 4에 value로써 리스트를 추가
>>> member
{1: 'mina', 2: 'jini', 3: 'jessi', 4: [1, 2, 3]}
>>>
변수명[key]=value 형태로 이미 어떤 key값에 할당되어 있는 value값을 변경해줄 수도 있다. 없는 key 값을 이런 형태로 입력하면 새롭게 key:value 쌍을 추가해주는게 된다.
또한 value 값에 리스트를 넣어줌으로써 key:value = 4:[1,2,3] 형태로 key값 4에 [1,2,3]이라는 리스트가 할당되도록 해줄수도 있다.
딕셔너리에서 key값은 정수형 문자형 모두 가능하다. 다만 타입을 구분하므로 중복되지 않도록 해주어야 헷갈일 일이 없다. 예를 들어서 정수형 10을 key값으로 사용하고 문자형 ’10’을 또 key 값으로 사용하면 딕셔너리 내에 두 개의 key:value 쌍이 생기는데 출력해서 이게 정수형인지 문자형인지 구분하기가 어려우므로 중복하지 않는게 좋다.
key : value 삭제
>>> member={1:'mina',2:'jini',3:'jessi'}
>>> del member[3]
>>> member
{1: 'mina', 2: 'jini'}
>>>
특정 key:value 쌍의 삭제는 del 변수명[key] 형태로 입력한다. value값을 몰라도 key값에 해당하는 value를 쌍으로 삭제하게 된다.
변수명.clear() 라고 하면 딕셔너리의 key:value 쌍 내용을 모두 지우고 빈 형태로 껍데기만 남긴다. 빈 형태는 리스트 [] 튜플 () 처럼 딕셔너리는 {}가 된다.
key, value 리스트 생성
위와 같이 딕셔너리 변수명 뒤에 함수를 붙여서 자료형에서 데이터를 뽑아낼 수 있다.
- 변수명.keys() : key 값들만 추출한 리스트를 만들어 준다.
- 변수명.values() : value 값들만 추출한 리스트를 만들어 준다.
- 변수명.items() : key,value 쌍을 각각 ()괄호형태 튜플로 묶은 리스트를 만들어 준다.
위와 같이 사용하면 된다.
이것을 응용하면
이렇게 딕셔너리에서 추출한 key,value 쌍 리스트에 반복문을 써서 모든 key, value 쌍을 출력하게 할 수 있다.
딕셔너리의 아주 간단한 개념만 살펴보았는데 (초급이니까…) 나중에 차차 파이썬 응용과 심도있는 공부를 하면서 딕셔너리를 어떻게 활용하는지 다시 알아보겠다.