파이썬 딕셔너리 (Dictionary) 사전자료형 선언과 key:value 연산

리스트(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 쌍을 출력하게 할 수 있다.

딕셔너리의 아주 간단한 개념만 살펴보았는데 (초급이니까…) 나중에 차차 파이썬 응용과 심도있는 공부를 하면서 딕셔너리를 어떻게 활용하는지 다시 알아보겠다.