본문 바로가기

Code Note

[Python] Dictionary 생성 & 추가(키-값 쌍)

728x90
반응형

파이썬에서 딕셔너리는 '키(key) : 값(value)' 형태로 자료를 저장하는 경우 사용합니다.

개인적으로는 딕셔너리를 색인이 필요한 경우 해당 키에 값(value)을 집어 넣는 형태로 사용하고 있습니다.

(참고로 딕셔너리의 value에는 리스트, 집합, 판다스 시리즈 뿐만 아니라 판다스 데이터프레임까지 다양한 형태의 자료형을 저장할 수 있습니다.)

 

딕셔너리란? (출처 : 점프 투 파이썬)

사람은 누구든지 "이름" = "홍길동", "생일" = "몇 월 며칠" 등으로 구별할 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 수 있는 자료형을 가지고 있다. 요즘 사용하는 대부분의 언어도 이러한 대응 관계를 나타내는 자료형을 갖고 있는데, 이를 연관 배열(Associative array) 또는 해시(Hash)라고 한다.
파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 하는데, 단어 그대로 해석하면 사전이라는 뜻이다. 즉 "people"이라는 단어에 "사람", "baseball"이라는 단어에 "야구"라는 뜻이 부합되듯이 딕셔너리는 Key와 Value를 한 쌍으로 갖는 자료형이다. 예컨대 Key가 "baseball"이라면 Value는 "야구"가 될 것이다.
딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다. 이것이 바로 딕셔너리의 가장 큰 특징이다. baseball이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.

 

dict 생성 방법

딕셔너리 형태의 자료형은 아래와 같이 중괄호({ }) 안에 키와 값을 콜론(:) 으로 구분한 형태로 선언할 수 있습니다.

또한, 동일한 딕셔너리이지만 코드 가독성을 높이고, 명시적으로 딕셔너리라는 것을 선언하기 위해 dict({ }) 형태로도 딕셔너리를 생성할 수 있습니다.

 

아래 코드와 같이 2개의 딕셔너리 temp_dict, temp_dict2 모두 type이 'dict' 임을 확인할 수 있습니다.

# 딕셔너리 생성 및 타입 확인
temp_dict = {'a': 'aaaa', 'b' : 10}
temp_dict2 = dict({'a': 'aaaa', 'b' : 10})

print(type(temp_dict), temp_dict)
print(type(temp_dict2), temp_dict2)
# <class 'dict'> {'a': 'aaaa', 'b': 10}
# <class 'dict'> {'a': 'aaaa', 'b': 10}

 

dict key 확인

# 딕셔너리 키 확인 : keys() [괄호 주의!]
print(temp_dict.keys())
# dict_keys(['a', 'b'])

 

setdefault 함수 사용

 

딕셔너리를 사용하다보면 딕셔너리에 값을 추가하거나, 저장되어 있는 값을 불러와야할 경우가 많다.

처음에는 직접 dict[key] 형태로 코드를 작성했는데, 좀 더 효율적으로 코드를 작성하기 위해 setdefault 함수를 사용하고 있습니다.

setdefault(key[, default])
If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.
만약 딕셔너리 안에 키가 있다면, 그 값을 반환한다. 만약 그렇지 않다면(딕셔너리 안에 키가 없다면) 값을 삽입한다. 함수의 기본값(사용자가 값을 입력하지 않는 경우)은 'None' 이다.

출처 : https://docs.python.org/3/library/stdtypes.html#dict.setdefault

 

아래 예제를 통해 car라는 dict를 처음에 선언하고, 아래 2가지 경우 car dict가 어떻게 변화하는지 살펴볼 수 있습니다.

위의 파이썬 공식 문서에서 2가지 케이스와 같이 붉은 글씨에 해당하는 경우는 해당 키에 저장된 값을, 푸른 글씨에 해당하는 경우는 해당 키에 새로운 값을 집어 넣습니다.

  • 1) 기존에 있는 key인 model에 K5 값을 집어넣는 경우 : 업데이트 X, 저장된 값 불러옴
  • 2) 기존에 없던 key인 trim에 새로운 값 TLX를 집어넣는 경우 : 업데이트 O
# =============================================================================
# setdefault method
# =============================================================================

car = {
  "brand": "KIA",
  "model": "SportageR",
  "year": 2011
}

print(type(car), car)
# <class 'dict'> {'brand': 'KIA', 'model': 'SportageR', 'year': 2011}

# 1) 기존에 있는 key에 새로운 값을 삽입 : 반영 X
x = car.setdefault("model", "K5")
print(x)
print(car)
# SportageR
# {'brand': 'KIA', 'model': 'SportageR', 'year': 2011}

# 2) 기존에 없는 key에 새로운 값을 삽입 : 반영 O
x = car.setdefault("trim", "TLX")
print(x)
print(car)
# TLX
# {'brand': 'KIA', 'model': 'SportageR', 'year': 2011, 'trim': 'TLX'}

 

 

 

반응형