본문 바로가기
프로그래밍/python

[python] java 개발자가 배우는 python - dictionary

by 사바라다 2020. 6. 17.

안녕하세요. 오늘은 java 개발자가 배우는 python 4번째 시간입니다. 오늘 배워볼 내용은 tuple과 마찬가지로 java에는 나오지 않는 자료형의 이름을 가진 dictionary입니다. 하지만 API를 개발해 보신분이라면 그렇게 생소하지 않을 것입니다. 빠르게 아래에서 dictionary에 대해서 알아보도록하겠습니다.

dictionary

dictionary는 java의 Map과 가장 유사한 자료구조를 가지고 있습니다. 즉, key - value Mapping의 자료구조라는 뜻입니다. dictionary는 list나 tuple 처럼 순차적으로 해당 요소값을 구하지 못하며 key를 통해 value의 값을 얻어옵니다. 이것이 dictionary의 가장 큰 특징이며 이때 hash를 사용하여 검색합니다. (hash에 관한 글은 [자료구조] 코드로 알아보는 java의 Hashmap 에서 자세하게 다루고 있습니다.)

key - value 매핑을 어떤식으로 하며 저장되는지 코드를 통해 확인해 보도록 하겠습니다. 기본적으로 dictionary는 {key1:value1, key2:value2, key3:value3, ...}의 형태로 이루어집니다. 이 형태는 json 형태와도 같습니다. 

dictionary 자료구조를 한번 선언해 보도록 하겠습니다. dictinoary의 선언은 {}으로 할 수 있습니다.

>>> dd = {}
>>> type(dd)
<class 'dict'>

선언과 동시에 초기화도 진행할 수 있습니다. 그때는 {key1:value1, key2:value2, key3:value3, ...}의 형태로 이루어집니다.

>>> d = {1 : 'a', 2 : 'b'}
>>> type(d)
<class 'dict'>

dictionary는 tuple과는 다르게 list처럼 mutable한 자료구조입니다. 따라서 추가, 삭제, 수정이 모두 가능합니다.

추가는 배열의 형태로 가능합니다. 변수명[key값] = value의 형태를 이용하면 추가와 수정이 가능합니다. dictionary에 이미 동일한 key값이 존재하면 수정이 이루어지며 그렇지 않다면 추가가 이루어집니다.

>>> dd['a'] = 1
>>> dd
{'a': 1}
>>> dd['b'] = 2
>>> dd
{'a': 1, 'b': 2}
>>> dd
{'a': 1, 'b': 2}
>>> dd['a'] = 3
>>> dd
{'a': 3, 'b': 2}

삭제의 경우는 del syntex를 사용할 수 있습니다. del 변수명[key] 명령어를 이용하면 삭제가 가능합니다. 그리고 만약 삭제하려는 key가 존재하지 않는 경우 KeyError가 발생합니다. java에서 Map에서는 만약 key가 없을 경우 null을 리턴하는 것과는 다른 양상을 뜁니다.

>>> dd
{'a': 3, 'b': 2}
>>> del dd['a']
>>> dd
{'b': 2}
>>> del dd['a']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'a'

마무리

오늘은 간단하게 python의 dictionary에 대해서 알아보았습니다. dictionary 관련 함수들은 아래 link에서 좀 더 자세히 확인하실 수 있습니다.

오늘은 여기까지 입니다.

감사합니다.

참조

https://wikidocs.net/16

https://docs.python.org/ko/3/tutorial/datastructures.html#dictionaries

댓글