프로그래밍/Python 관련 정보

[Python Programming 기초] Dictionary

물박사의 저장공간 2024. 10. 22. 22:15

이번 포스팅에서는 dictionary를 알아보겠습니다. dictionary를 만들 때 보통 아래와 같이 만들죠?

student = { 
    "name": "Bob", 
    "age": 11, 
    "ID": "puppy23" 
}

 

dictionary는 그런데 이렇게도 만들 수 있습니다. 이런 (변수=값) 형식으로 넣을 경우 변수가 문자열 형식의 key가 됩니다.

d = dict(a=-11, b=2.5, xx='good')

 

꼭 이런식으로 직접적으로 dictionary의 key와 value를 지정해주지 않아도 두 값으로 이루어진 sequence에 dict()라는 명령어를 이용해서 dictionary로 변환할 수 있습니다. (단, 이 때 key는 hashable한 대상이어야 합니다)

Pre = (('math', 85), ('Physics', 99))
dict1 = dict(Pre) # {'math': 85, 'Physics': 99}
dict2 = {key:value for key, value in Pre if value>90} # {'Physics': 99}

 

위 예시에서는 tuple을 dictionary로 변환한 후, comprehension을 통해서 원하는 조건의 원소들만 뽑아내는 것을 보여주고 있네요. car_list와 price_list라는 list 2개가 있고 각각의 위치에 대응되는 원소끼리 dictionary를 만든다고 하면

dict(zip(car_list, price_list))

 

이렇게 만들어주면 됩니다. 

 

그리고 dictionary에서 하나 더 추가하고 싶은 내용이 있는데요, 바로 defaultdictionary입니다. 제가 코딩 테스트를 준비할 때 처음 접했던 것인데요. 원래 dictionary라는 '사전'에 key가 존재하지 않는 경우에는 key error가 발생하게 됩니다. 사실 이런 에러를 회피하기 위해서는 예외처리를 해주는 등의 신경을 써주어야 하는데요

방법1) 예외처리

my_dict = {'a': 1, 'b': 2}

# 'c'라는 키에 접근 시 KeyError 발생
try:
    print(my_dict['c'])
except KeyError:
    print("'c'는 my_dict에 존재하지 않습니다.")

 

방법2) get method 이용

my_dict = {'a': 1, 'b': 2}

# 키 'c'가 없으면 기본값으로 None 반환
value = my_dict.get('c', 'default_value')
print(value)  # 출력: default_value

 

이것을 좀 더 간단하게 구현할 수 있는 방법이 바로 default dictionary입니다. 

from collections import defaultdict

# 기본값이 0인 defaultdict 생성
my_defaultdict = defaultdict(int)

# 'a'는 초기화되지 않았지만 기본값 0이 자동으로 할당됨
print(my_defaultdict['a'])  # 출력: 0

# 값을 변경
my_defaultdict['a'] += 1
print(my_defaultdict['a'])  # 출력: 1

 

default dictionary를 생성할 때 처음 넣어주는 인자는 key의 기본값(그러니까 key의 형태라고 생각하시면 될 것 같습니다)의 타입입니다. 지금은 int 그러니까 이 default dictionary의 key는 정수형이라는 것을 명시해주는 것이죠.

defaultdict가 유용한 이유

  1. KeyError 방지: 새로운 키에 대해 자동으로 기본값을 생성하므로 예외 처리가 필요 없습니다.
  2. 코드 간결화: get()이나 try-except 블록을 사용할 필요 없이 더 깔끔한 코드를 작성할 수 있습니다.
  3. 다양한 기본값 지원: int, list, set 등 다양한 기본값을 설정할 수 있어 사용 용도에 맞게 유연하게 사용할 수 있습니다.