
Using the Dict && DefaultDict to Practical
필자도 처음에 파이썬을 사용할 때, dict을 왜 사용할 까 생각했습니다. (뭐 물론, 그 당시에는 지식이 전무하던 학생이었으니,,,) 그냥 list 사용해서 데이터 적재해서 편하게 꺼내서 쓰면 안 돼? 응 안돼~ 안됩니다 ㅎㅎㅎ 네트워크 분야 들어가고, 데이터 분야 들어가고 하다 보면, 이 파이썬의 딕셔너리 자료구조는 얼마나 개발자의 마음을 어루만져 주는지 모릅니다! 개발하신 분들은 모두 이해하실 거라 생각합니다! 그래도 코드 세상에서 살다 보면, 이 코드, 저 코드보다 보면 "얘 어떻게 선언하더라.." 합니다! 사람 기억력은 유한하니까 말입니다.. 여하튼 각설하고 파이썬의 딕셔너리에 대해서 설명드리도록 하겠습니다. 그리고 자료구조 중에 기본 내장 구조인 일반 딕셔너리, 우리가 흔히 dict라고 사용하는 키워드와 collections 모듈 안에 있는 defaultdict입니다. 이 두 개는 무조건 마스터? 여하튼 그까진 하셔야...ㅎㅎ

위의 그림은 중첩 딕셔너리 구조인데, 사실 뭐 중첩됫든 아니든, 값 키값에 대응하는 값들이 존재하는 건 같으니까요~ 그러니까 키 값 1에 대응하는 값은 Geeks가 되겠죠, 물론 3에 대응되는 값은 또 다른 딕셔너리 구조입니다. 그 내부에 중첩되는 딕셔너리에도 대응되는 키값 쌍이 존재할 수 있습니다! 어디까지 중첩될 런진... 물론 그렇게 까지 기이 잎 게 구현할 일은 잘 없으니까요~
우선 딕셔너리부터 알아봅시다!!
Dict
우선 코드로 설명 드릴 예정인데요 그냥 딕셔너리의 기능은 많이 구현할 건 없습니다!! 그냥 따라오시면 "아~" 하니까요!!
1
2
3
|
>>> Dict = {1 : "Python", 2 : "is", 3 : "Awesome"}
>>> print(Dict)
{1: 'Python', 2: 'is', 3: 'Awesome'}
|
cs |
뭐 별로 특별하지 않은 코드이죠? 굳이 dict라는 키워드를 사용해서 선언하지 않아도, { } 쌍안에 대응하는 값이 들어가면 파이썬 인터프리터는 이를 "아 딕셔너리를 쓰고 싶구나" 하고 바로 아니까요, 그런데 굳이 나는 확실히 코드를 작성하고 싶다면 아래와 같이 작성해도 상관없습니다!
1
2
3
|
>>> Dict = dict({1 : "Python", 2 : "is", 3 : "Awesome"})
>>> Dict
{1: 'Python', 2: 'is', 3: 'Awesome'}
|
cs |
당연히 같은 내용의 결과가 출력됩니다! 그렇다면, 딕셔너리를 사용할 수 있는 함수에는 어떤 함수가 있는지 보도록 하겠습니다!
1
2
3
4
5
6
7
|
>>> foo[0] = "python"
>>> foo[1] = "is"
>>> foo[2] = "awesome"
>>> foo
{0: 'python', 1: 'is', 2: 'awesome'}
>>> foo[2]
'awesome'
|
cs |
기본적으로 인덱스를 통한 접근이 가능합니다. 물론 foo는 foo = {}라고 선언된 상태입니다! 빈 딕셔너리를 선언해서 사용자 임의대로 키 값을 할당하고 대응되는 값을 삽입하는 연산은 위와 같이 아주 간단하게 가능합니다!!
get()
키값으로의 접근을 통해 대응되는 값을 반환하는 딕셔너리 내장 함수입니다!!
1
2
3
4
5
6
7
8
|
>>> foo.pop(0)
'python'
>>> foo
{1: 'is', 2: 'awesome'}
>>> foo.pop(2)
'awesome'
>>> foo
{1: 'is'}
|
cs |
pop()함수는 여러분들도 잘 아시다시피, 선형 자료구조에서 데이터를 제거할 때 많이 사용되죠? 이름도 뭐 거의 비슷하고요~ 여하튼 보시게 되면 키값으로의 접근을 통해 데이터를 삭제합니다!!
update()
1
2
3
4
5
6
7
8
9
|
>>> a= {0:"1", 1 : "2"}
>>> b = {2 : "3", 3 : "4"}
>>> a.update(b)
>>> a
{0: '1', 1: '2', 2: '3', 3: '4'}
>>> c = { 0: "not 1"}
>>> a.update(c)
>>> a
{0: 'not 1', 1: '2', 2: '3', 3: '4'}
|
cs |
update()검색하시고 오신 분들 왠지 많을 것 같습니다! 이름만 들어선 뭘 업데이트하겠다는 건지 딱히 감이 안 잡히니까요! update() 내장 함수는 기존이 되는 딕셔너리에 다른 딕셔너리의 값을 참조해 대입하기도 하고, 위의 a에 c를 업데이트할 때 보시면 값은 키값 0이 있죠? 그런데 결과를 보시면 c에서 0의 키에 대응되는 값이 a의 딕셔너리로 들어간 것을 확인할 수 있습니다. 이처럼 값을 바꾸기도, 추가하기도 하는 강력한 내장 함수니까 꼭 잘 알아두시길...
keys() && items()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> for foo in a.keys():
... print(foo)
...
0
1
2
3
>>> for foo, bar in a.items():
... print(foo, " " , bar)
...
0 not 1
1 2
2 3
3 4
|
cs |
위와 같이 사용하면 됩니다. keys()는 딕셔너리의 키 값에만 접근하는 내장 함수이며, items()는 키 값과 키에 대응되는 값 두개에 접근하여 반환 형태는 Tuple Pair의 형태로 반환하는 함수입니다!! 가장 많이 사용되는 함수는 items()와 keys()라서 이 두 개는 꼭 외워두시길 바라겠습니다!!
defaultdict()는 다음 글에서 설명드리도록 하겠습니다!! 디테일하게 설명을 해야하는데, 본 글이 너무 길어져서 안 되겠습니다...ㅋㅋㅋㅋㅋ
감사합니다!!
댓글로 문의, 피드백, 질문 환영합니다!!
[Python] DefaultDict 다루기!!!
Powerful Structure of dict -> DefaultDict 파이썬에서는 그냥 dictonary 구조에서 내장 구조 dict도 있지만, 내장 라이브러리인 collections내부에 정의되어 있는 또 다른 딕셔너리 구조가 있는데, 그 친구의..
hazarddev.tistory.com
'Python' 카테고리의 다른 글
[Python] DefaultDict 다루기!!! (0) | 2020.12.10 |
---|---|
[Python_Class#1] 파이썬 Class 손 쉽게 이해하기!! (0) | 2020.12.08 |
파이썬에서의 문자열 리스트 변환 및 자르기! (0) | 2020.11.29 |
자료구조[3]-이진트리(python) (1) | 2020.06.03 |
자료구조[2] - Queue(python) (0) | 2020.06.02 |
댓글