About Dictionaries

Page content

강의 홍보

I. 개요

  • 이번 시간부터 본격적으로 파이썬의 기초 자료형에 대해 간단한 튜토리얼을 준비했다.
  • 데이터 분석과는 큰 관계가 없을 수 있지만, 데이터 정제 할 때, 도움이 되기도 한다.
  • 그 중에서 면접의 단골질문과 같은 Dictionary에 대해 나누는 시간을 가졌다.

II. Dictionary의 기본적인 특징

  • Dictionary는 영어 원뜻 그대로 사전을 생각하면 된다.
  • DictionaryList와 유사한 부분이 많다.
    • List와 같이 Mutable이라는 뜻을 포함한다.
    • List와 같이 다른 Dictionary, list 등을 포함시킬 수 있다.
  • 차이점은 원소에 대한 접근방법의 차이다.
    • List에서 각 원소에 대한 접근법은 index을 활용한다.
    • Dictionary에서 각 원소에 대한 접근법은 keys에 의해 접근한다.

III. Dictionary 정의

  • 로고사진처럼, Dictionarykey-value로 구성 되어 있다.
  • Dictionary를 정의하는 방법에는 여러가지가 있다.

(1) 기본 { }를 활용한 방법

  • 기본적인 문법은 아래와 같다.
d = {
    <>: <>,
    <>: <>,
      .
      .
      .
    <>: <>,
}
  • 간단하게 국내 야구팀을 Dictionary 형태로 만들어보자.
KOR_team1 = {
    "인천"  : "SK", 
    "서울1" : "LG", 
    "서울2" : "두산", 
    "창원"  : "NC",
    "광주"  : "기아",
    "대구"  : "삼성",
    "대전"  : "한화",
    "부산"  : "롯데",
    "수원"  : "KT",
    "고척"  : "키움",
}
KOR_team1
{'고척': '키움',
 '광주': '기아',
 '대구': '삼성',
 '대전': '한화',
 '부산': '롯데',
 '서울1': 'LG',
 '서울2': '두산',
 '수원': 'KT',
 '인천': 'SK',
 '창원': 'NC'}

(2) 내장함수 dict()를 활용하는 방법

  • key-value를 활용하는데, 이 때 tuple 형태로 작성한다.
d = dict([
    (<>, <>),
    (<>, <값),
      .
      .
      .
    (<>, <>)
])
  • 똑같이 야구팀을 작성한다.
KOR_team2 = dict([
  ("인천", "SK"), 
  ("서울1", "LG"), 
  ("서울2", "두산"), 
  ("창원", "NC"), 
  ("광주", "기아"), 
  ("대구", "삼성"), 
  ("대전", "한화"), 
  ("부산", "롯데"), 
  ("수원", "KT"), 
  ("고척", "키움")
])

KOR_team2
{'고척': '키움',
 '광주': '기아',
 '대구': '삼성',
 '대전': '한화',
 '부산': '롯데',
 '서울1': 'LG',
 '서울2': '두산',
 '수원': 'KT',
 '인천': 'SK',
 '창원': 'NC'}

(3) dict with spring

  • dict() 함수 안에 문자열 변수를 입력하는 형태로 코드를 작성한다.
KOR_team3 = dict(
  인천 = "SK", 
  서울1 = "LG", 
  서울2 = "두산", 
  창원 = "NC", 
  광주 = "기아", 
  대구 = "삼성", 
  대전 = "한화", 
  부산 = "롯데", 
  수원 = "KT", 
  고척 = "키움" 
)

KOR_team3
{'고척': '키움',
 '광주': '기아',
 '대구': '삼성',
 '대전': '한화',
 '부산': '롯데',
 '서울1': 'LG',
 '서울2': '두산',
 '수원': 'KT',
 '인천': 'SK',
 '창원': 'NC'}
  • 실제 Dictionary 형태로 정의가 되었는지 확인해본다.
print(type(KOR_team1))
print(type(KOR_team2))
print(type(KOR_team3))
<class 'dict'>
<class 'dict'>
<class 'dict'>

IV. Dictionary 접근법

  • Dictionary 원소 접근법은 indexing이 아니라 key값에 의해 결정된다.
print(KOR_team1['인천'])
print(KOR_team1['부산'])
SK
롯데
  • 만약에 전주에 새로운 야구팀(현대)이 생겼다고 가정하자.
  • 추가하는 소스코드는 아래와 같다.
KOR_team1['전주'] = "현대"
KOR_team1
{'고척': '키움',
 '광주': '기아',
 '대구': '삼성',
 '대전': '한화',
 '부산': '롯데',
 '서울1': 'LG',
 '서울2': '두산',
 '수원': 'KT',
 '인천': 'SK',
 '전주': '현대',
 '창원': 'NC'}
  • 전주: 현대가 추가된 것을 확인할 수 있다.
  • 이번에는 방금 추가한 전주: 현대를 삭제하도록 하자. (del) 함수 사용
del KOR_team1['전주']
KOR_team1
{'고척': '키움',
 '광주': '기아',
 '대구': '삼성',
 '대전': '한화',
 '부산': '롯데',
 '서울1': 'LG',
 '서울2': '두산',
 '수원': 'KT',
 '인천': 'SK',
 '창원': 'NC'}
  • 정상적으로 삭제가 된 것을 확인할 수 있다.

V. Dictionary Using Integer

  • 이전까지 접근한 것은 문자를 입력해서 접근했다.
  • Integer로 활용하는 방법은 없을까?
dic = {0: 'a', 1: 'b', 2: 'c', 3: 'd'}
dic
{0: 'a', 1: 'b', 2: 'c', 3: 'd'}
print(dic[0])
print(dic[1])
a
b
  • 그러나 주의해야 하는 것은 diclist가 아니다.
  • 즉, list에서 할 수 있었던, slicing이나 append를 사용할 수 없다.
    • 관련 에러 몇개를 확인해보자.
dic.append('e')
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-20-8bfa5988d009> in <module>()
----> 1 dic.append('e')


AttributeError: 'dict' object has no attribute 'append'
  • AttributeError: 'dict' object has no attribute 'append' 이 뜻이 함의하는 것은 dictionary에는 append라는 속성값이 없다는 뜻이다.
dic[0:2]
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-21-82c17d59c309> in <module>()
----> 1 dic[0:2]


TypeError: unhashable type: 'slice'
  • 마찬가지로 list에서 작동했던 slice는 여기에서는 존재하지 않는다.

VI. Dictionary와 관련된 여러 함수 소개

  • Dictionary와 함께 사용되면 좋은 함수들을 간단하게 소개 한다.

(1) d.clear()

  • 먼저 아래 코드를 확인해보자.
dic = {'A': 1, 'B': 2, 'C': 3}
dic
{'A': 1, 'B': 2, 'C': 3}
  • clear() 함수 적용 뒤 결과값을 확인해보자.
dic.clear()
dic
{}
  • 결과값을 확인해보니 모두 삭제된 것을 확인할 수 있다.

(2) d.get()

  • get()함수는 key값을 활용해서 value값을 가져오는 함수다.
  • 소스코드를 통해 확인하자.
dic = {'A': 1, 'B': 2, 'C': 3}
print(dic.get('B'))
print(dic.get('Z'))
2
None
  • .get('B')에 해당하는 Dictionary값이 존재하기 때문에 2를 반환한다.
  • .get('Z')에 해당하는 Dictionary값이 존재하지 않기 때문에 None을 반환한다.
    • 그런데 None을 반환하기 보다 특정 숫자 또는 문자로 출력하고 싶다면 다음과 같이 입력하면 된다.
print(dic.get('z', 0))
print(dic.get('z', "없음"))
0
없음

(3) d.keys()

  • Dictionarykeyvalue로 구성되어 있는데, keys()의 뜻은 현재 구성되어 있는 Dictionary에서 keys()dict_keys 형태로 반환한다.
    • 이 때, list로 변환을 하려면 list()를 활용하면 된다.
dic = {'A': 1, 'B': 2, 'C': 3}
print(dic.keys())
print(list(dic.keys()))
dict_keys(['A', 'B', 'C'])
['A', 'B', 'C']

(4) d.values()

  • keys()를 활용하여 key를 반환했던 것처럼, values()를 활용하여 value를 진행하자.
    • 코드는 위와 동일하다. 다만, 함수만 바꾼다.
dic = {'A': 1, 'B': 2, 'C': 3}
print(dic.values())
print(list(dic.values()))
dict_values([1, 2, 3])
[1, 2, 3]
  • 그 외에도 pop(), popitem(), update()를 활용법을 익혀본다.

VII. Reference

w3schools. Python Dictionaries. Retrieved June 20, 2020, from https://www.w3schools.com/python/python_dictionaries.asp