About Dictionaries
Page content
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
I. 개요
- 이번 시간부터 본격적으로 파이썬의 기초 자료형에 대해 간단한 튜토리얼을 준비했다.
- 데이터 분석과는 큰 관계가 없을 수 있지만, 데이터 정제 할 때, 도움이 되기도 한다.
- 그 중에서 면접의 단골질문과 같은
Dictionary
에 대해 나누는 시간을 가졌다.
II. Dictionary의 기본적인 특징
Dictionary
는 영어 원뜻 그대로 사전을 생각하면 된다.Dictionary
는List
와 유사한 부분이 많다.List
와 같이Mutable
이라는 뜻을 포함한다.List
와 같이 다른Dictionary
,list
등을 포함시킬 수 있다.
- 차이점은 원소에 대한 접근방법의 차이다.
List
에서 각 원소에 대한 접근법은index
을 활용한다.Dictionary
에서 각 원소에 대한 접근법은keys
에 의해 접근한다.
III. Dictionary 정의
- 로고사진처럼,
Dictionary
는key-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
- 그러나 주의해야 하는 것은
dic
는list
가 아니다. - 즉,
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()
Dictionary
는key
와value
로 구성되어 있는데,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