Python Data Structure (4) - Dictionary

에이블·2022년 2월 4일
0

파이썬

목록 보기
7/20

본 게시물은 코드프레소의 code.PRESS-UP 체험단 과정을 담은 게시물입니다.

해당 게시물 수강강좌 :

금융 데이터 분석을 위한 파이썬 프로그래밍

금융 데이터 분석을 위한 파이썬 프로그래밍 시작하기

https://www.codepresso.kr/course/51

이번 포스팅은 코드프레소 강의를 통해 딕셔너리 자료형에 대해 알아보겠습니다.

Map, HashMap과 유사한 구조입니다. Key/Value를 통한 데이터관리를 하죠

매우 중요한 부분이니까 코드프레소 강의를 꼼꼼하게 듣고 복습해 봅시다.

Dictionary

사람은 누구든지 "이름" = "홍길동", "생일" = "몇 월 며칠" 등으로 구별할 수 있다.

파이썬은 영리하게도 이러한 대응 관계를 나타낼 수 있는 자료형을 가지고 있다.

요즘 사용하는 대부분의 언어도 이러한 대응 관계를 나타내는 자료형을 갖고 있는데, 이를 연관 배열(Associative array) 또는 해시(Hash)라고 한다.

파이썬에서는 이러한 자료형을 딕셔너리(Dictionary) 라고 하는데 딕셔너리는 Key와 Value를 한 쌍으로 갖는 자료형이다.

딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.

이것이 바로 딕셔너리의 가장 큰 특징이다. baseball이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.

표현법

딕셔너리의 기본 모습은 다음과 같다.

{Key1:Value1, Key2:Value2, Key3:Value3, ...}

Key와 Value의 쌍 여러 개가 { }로 둘러싸여 있다. 각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,)로 구분되어 있다.

>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

다양하게 Key/Value를 정의할 수 있다.

Key : 정수형 / Value : 문자열

>>> a = {1: 'hi'}

Key : 문자열 / Value : 리스트

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

추가/삭제

추가

{1: 'a'} 딕셔너리에 a[2] = 'b'와 같이 입력하면 딕셔너리 a에 Key와 Value가 각각 2와 'b'인 2 : 'b'라는 딕셔너리 쌍이 추가된다.

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

딕셔너리 a에 'name': 'pey'라는 쌍이 추가되었다.

>>> a['name'] = 'pey'
>>> a
{1: 'a', 2: 'b', 'name': 'pey'}

Key는 3, Value는 [1, 2, 3]을 가지는 한 쌍이 또 추가되었다.

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

제거

del 함수를 사용해서 del a[key]처럼 입력하면 지정한 Key에 해당하는 {key : value} 쌍이 삭제된다.

>>> del a[1]
>>> a
{2: 'b', 'name': 'pey', 3: [1, 2, 3]}

활용법

Key를 사용해 Value 얻기

리스트나 튜플, 문자열은 요솟값을 얻고자 할 때 인덱싱이나 슬라이싱 기법 중 하나를 사용했다.

하지만 딕셔너리는 단 한 가지 방법뿐이다. 바로 Key를 사용해서 Value를 구하는 방법이다. 어떤 Key의 Value를 얻기 위해서는
딕셔너리변수이름 [Key] 을 사용한다.

>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a[2]
'b'
>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> dic['name']
'pey'
>>> dic['phone']
'0119993323'
>>> dic['birth']
'1118'

🔧 주의사항

  • Key는 고유한 값이므로 중복되는 Key는 불가능하다.
  • Key에는 리스트를 사용할 수 없다.
  • 튜플은 사용할 수 있다.
  • 단 Value에는 변하는 값이든 변하지 않는 값이든 상관없이 아무 값이나 넣을 수 있다.

메소드

Key 리스트 만들기(keys)

a.keys()는 딕셔너리 a의 Key만을 모아서 dict_keys 객체를 돌려준다.

>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
🔧 주의사항
파이썬 3.0 이후 버전에서는 이러한 메모리 낭비를 줄이기 위해 dict_keys 객체를 돌려준다.

dict_keys 객체는 다음과 같이 사용할 수 있다. 리스트를 사용하는 것과 차이가 없지만, 리스트 고유의 append, insert, pop, remove, sort 함수는 수행할 수 없다.

>>> for k in a.keys():
...    print(k)
...
name
phone
birth

dict_keys 객체를 리스트로 변환하려면 다음과 같이 하면 된다.

>>> list(a.keys())
['name', 'phone', 'birth']

Value 리스트 만들기(values)

Key를 얻는 것과 마찬가지 방법으로 Value만 얻고 싶다면 values 함수를 사용하면 된다. values 함수를 호출하면 dict_values 객체를 돌려준다.

>>> a.values()
dict_values(['pey', '0119993323', '1118'])

Key, Value 쌍 얻기(items)

items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다. dict_values 객체와 dict_items 객체 역시 dict_keys 객체와 마찬가지로 리스트를 사용하는 것과 동일하게 사용할 수 있다.

>>> a.items()
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])

Key: Value 쌍 모두 지우기(clear)

clear 함수는 딕셔너리 안의 모든 요소를 삭제한다. 빈 리스트를 [ ], 빈 튜플을 ( )로 표현하는 것과 마찬가지로 빈 딕셔너리도 { }로 표현한다

>>> a.clear()
>>> a
{}

Key로 Value얻기(get)

get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다. 앞에서 살펴보았듯이 a.get('name')은 a['name']을 사용했을 때와 동일한 결괏값을 돌려받는다.

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'0119993323'

딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 편리하다.

>>> a.get('foo', 'bar')
'bar'

a 딕셔너리에는 'foo'에 해당하는 값이 없다. 따라서 디폴트 값인 'bar'를 돌려준다.

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

'name' 문자열은 a 딕셔너리의 Key 중 하나이다.
따라서 'name' in a를 호출하면 참(True)을 돌려준다.
반대로 'email'은 a 딕셔너리 안에 존재하지 않는 Key이므로 거짓(False)을 돌려준다.

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False

딕셔너리는 꽤 많이 사용하고 데이터구조에서 매우 유용한 자료구조이다.

해당 데이터 구조의 주소값을 넣을수도 있고 카테고리 별로 데이터를 묶어 처리할 수 도 있다.

코드프레소 강의를 통해 딕셔너리에 대해 자세하게 알아보았다.
매우 유의미한 강의가 된 것 같다.

다음 코드프레소 강의는 함수/클래스이다.
파이썬 뿐만 아니라 모든 언어에서 SW개발을 할때 필요한 개념이다.

충분한 코드프레소 강의 복습을 통해 잡고 가도록하자.

profile
꺾이지 않는 마음

0개의 댓글