자료구조 - 딕셔너리(dict)

hyuckhoon.ko·2020년 5월 13일
0

What I learned in wecode

목록 보기
18/109

1. 코드 예시로 통해 딕셔너리를 시작해보려고 한다.

우선, 한 달 동안 수업 지각한 학생들의 빈도수를 확인하는 프로그램을 보자

# 한 달 동안 수업 지각한 사람 리스트 
lateness = ["Jake", "Mike", "Tylor", "Josh", "Josh", "Mike",             "Brian", "Jake", "Jake", "Barnet", "Jake"]

# dict 선언
late_dict = {}

for late in lateness:
    # 지각한 사람이 이미 dict 명단에 있다면
    if late in late_dict:
        late_dict[late] +=1
    # 지각한 사람이 이미 dict 명단에 없다면
    else:
        late_dict[late] = 1    
print(late_dict)

결과



2. 딕셔너리란?

코딩을 시작하고나서 무서운 습관이 하나 생겼다.

졸라맨 번개 피하기 게임, 연예인 부부 이름 맞추기 게임, 제주항공 접속하여 비행기 티켓 알아내기 등의 프로그램을 만들며 자연스레 '배열'을 사용한다는 것이다. 물론 비행기 티켓의 경우는 '이진 트리'를 사용하기도 했지만.

사용자가 데이터를 다루는데 있어서, 리스트에 인덱스로 접근하는 것보다 일상에서 사전을 사용하듯 'key'와 'value'로 접근하는 것이 편할 때가 있다.

배열이 그래서 나쁘다고 말하는 것은 절대 아니다.

다만, 내가 구현하려는 프로그램에 딕셔너리가 더욱 효과적일 경우에

'배열 또는 리스트 -> 딕셔너리'로 변환해야 한다는 너무나 당연한 말을 하는 것이다ㅎㅎ



개념을 알기위해 이번엔 아래와 같이 과일 딕셔너리를 선언했다.

fruits = {"banana" : 5,
        "apple" : 3,
        "kiwi" : 7,
        "pineapple": 1}

# 바나나의 value는 ?
print("바나나 개수 : " + str(fruits["banana"]))
print(fruits.keys())
print(fruits.values())

배열의 인덱스보단 'key'로 접근하는 딕셔너리가 더 직관적이다.

인덱스를 사용해서 [0], [1], ... 와 같은 방식은

주석을 달아놓지 않으면 이해하기 힘들다.

또한, 산재하게 놓여진 데이터에서 key라는 기준으로 정렬함으로써

사용자 정의 데이터Set을 하는 것과 같다는 느낌을 받았다. 즉, 의미없이 저장되어 있는 리스트에서 내가 원하는 규칙으로(key) 데이터를 가공한다.



3.딕셔너리 vs 해쉬

아직 '해쉬(테이블)'을 배우진 않았지만

(dict) 자료를 입력할 때, 데이터의 자료형을 미리 정해줘야 한다고 한다. 고정된 데이터 타입을 받는 경우에 유리한 자료구조다.

(hash)자료형을 미리 정하지 않고 input 값을 받는다. 따라서, 박싱/언박싱 작업이 필요하다고 한다. 어떤 자료형의 인풋 데이터든 다 받아야할 경우 사용한다.

해쉬테이블 개념을 정리할 때 다시 한 번 확인하고 정리하자.



4. 구현 예시

연예인 부부 이름 맞추기 게임을 만들며 사용했던 dict는 다음과 같다.

answer = "sentence"         # <-- string 자료형의 answer
answer = list(answer)       # <-- list화 ['s','e','n','t','e','n','c','e']

answer = dict.fromkeys(answer)
print(answer)

answer = "umbrella"
answer = list(answer)
answer = dict.fromkeys(answer)
print(answer)


answer = "mountain"
answer = list(answer)
answer = dict.fromkeys(answer)
print(answer)

그 결과

다음과 같이 중복된 단어를 제외한 가공 데이터를 준다.

유저가 's'를 입력하면, '_' 되어 있는 곳을 's' 로 변경시킨다.

(즉, '_' --> 's'로 변경되게 한다.)

정답 여부를 판단하는 함수에 사용했던 '딕셔너리'의 메소드였다.

                                - One step at a time - 

0개의 댓글