본문 바로가기
언어/Python

[Python 기본 공부정리] 3-5. 자료형-딕셔너리(dictionary)

by 민-Zero 2019. 12. 5.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 

틀린 부분에 대한 지적은 감사합니다.

1. 딕셔너리(dictionary)

딕셔너리 자료형이란 어떤 값의 대응 관계를 나타 낼수 있는 집합의 일종인 자료형이다. 예를 들어 "이름=홍길동", "생년월일=123456", "전화번호=01012345678" 등등의 대응 관계를 나타낼 수 있는 자료형 이란 뜻이다. 따라서 딕셔너리 자료형은 이름은 누구 전화번호는 ~~~ 처럼 대응되는 값들을 key 와 value 한쌍으로 만들어 가지는 자료형이다.

딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻게된다. 이것이 가장 큰 특징이다. 전화번호가 무엇인지 알아 보기위해 데이터를 전부 검사하는 것이 아니라 전화번호라는 키가 있는 곳만 펼쳐 보는 것이다. 순차적으로 검색 하는 자료형이 아니기 때문에 인덱싱이나 슬라이싱이 불가능 하다.

문법)

딕셔너리명 = {키1:값1, 키2:값2, 키3:값3, ....}

 

 

다양한 자료형을 key값과 value로 사용할 수 있다. 하지만 key값으로 설정할 수 없는 값이 있다.

 

list자료형은 value로는 가능하지만 key로는 사용할 수 없다 하지만 tuple은 또 key로 사용 가능한대 그 이유는 key값이 변경되면 안되기 때문에 변경 불가능한 튜플은 사용가능 하지만 요소의 수정이 가능한 리스트는 사용할 수 없는 것이다.

key값 과 value값이 같은 값을 가지는 것은 상관 없다.

 

하지만 키값을 중복하여 사용 가능하지만 중복할경우 뒤의 값으로 덮어 씌워져 사용된다. 키값을 통해 값을 찾기 때문에 중복된 키값이 있을경우 어떤 값을 반환 해야 할지 모르기 때문에 덮어 씌워 진다.

 

딕셔너리의 요소에 접근하는 방법은 리스트나 튜플과 비슷하지만 인덱스를 통한 접근이 아니라 key값을 이용한 접근이다. 만약 인덱스를 통한 접근이였다면 dic1[0] 는 'float'을 반환해야 하지만 'zero'를 반환 하는 것을 보면 알 수 있다.

 

2. 딕셔너리 요소 추가, 제거

 

딕셔너리에 값을 추가하는 방법도 [] 를 통해 요소를 추가 할 수 있다. []안에 값의 위치에 데이터를 저장하는 것이 아니라 딕셔너리명[key] = value 를 통해 딕셔너리의 맨끝에 key 와 value가 추가되는 것이다.

 

제거도 리스트나 튜플처럼 del을 통해 수행할 수 있고 지우고자 하는 값의 key를 통해 제거한다.

 

3. 딕셔너리 관련 메소드

1) keys(), values(), items()

해당 메소드는 딕셔너리의 key만으로 이루어진 객체나 value만으로 이루어진 객체 또는 key,value를 쌍으로 묶은 값으로 이루어진 객체를 반환해 준다.

파이썬 2.7 버전까지는 .keys() 함수를 호출할 때 반환 값으로 dict_keys가 아닌 리스트를 돌려주었다. 그런대 3.0버전 이후에는 리스트로 돌려줄때 발생하는 메모리 낭비를 줄이기 위해 dict_keys 객체를 돌려주도록 바뀌었다. 따라서 key로 이루어진 리스트를 얻고 싶다면 해당 메소드를 builtins 함수 list()로 감싸 형변환을 해주면 된다.

 

keys() 와 마찬가지로 수행하며 되며 3.0버전 이후로 dict_values객체를 반환하게 되었으므로 리스트가 필요하다면 형변환을 해주면 된다.

 

items() 메소드는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.

 

2) clear()

clear 함수는 딕셔너리 안의 모든 요소를 삭제한다. 빈 딕셔너리 {} 를 대입해 모든 요소를 삭제 하는 것도 가능하다.

 

3) get()

딕셔너리명.get(key) 메소드는 key값을 통해 value를 반환받을 수 있는 함수 이다.

dic1.get(10.1) 은 dic1[10.1] 과 같은 값을 반환한다. 이 두개의 차이점은 존재하지 않는 key를 입력했을때 이다.

 

get메소드를 이용할 경우 딕셔너리에 존재하지 않는 key가 들어오면 None을 반환하지만 []를 이용하게 되면 에러를 발생시킨다. 둘중 상황에 맞게 이용하면 된다.

 

4) in

멤버연산자 in을 딕셔너리에 이용하여 key값이 딕셔너리 변수에 존재하는지 확인하는 방법이다.

key값이 존재할 경우 True를 없으면 False를 반환 하며 value값은 찾지 못한다.

댓글