Data/Python

[Python] 파이썬 딕셔너리 자료형 - 추가, 삭제, Value 값 찾기, 함수들

재은초 2023. 6. 17. 20:40
반응형

딕셔너리(Dictionary)란?

  • 키(Key)와 밸류(Value)라는 1:1 대응 관계를 한 쌍으로 갖는 사전형 자료형태로, 이를 연관 배열(Associative array) 또는 해시(Hash)라고 한다.
  • 키값은 중복이 불가능하고 절대로 변하지 않지만, 벨류값은 중복이 가능하고 수정도 가능하다.
  • 리스트나 튜플은 순차적(sequential)이지만, 딕셔너리는 순차적이지 않아서 인덱스가 없고 그래서 인덱싱 대신 Key를 통해 Value를 얻는다.

딕셔너리 만드는 법

  • 각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,) 로 구분되어 있다.
>>> a = dict()                  # 빈 딕셔너리 생성
>>> b = {}

>>> c = {1: 'hi'}               # 키값 숫자, 벨류값 문자열
>>> d = {'a': [1,2,3]}          # 키값 문자열, 벨류값 리스트
>>> dic = {'name':'pey'         # 키값 문자열, 벨류값 문자열
		, 'phone':'0119993323'
        , 'birth': '1118'}
        
>>> e = {(1,2) : 'hi'}          # 키값으로 튜플 가능 - 변하지 않는 값
>>> f = {[1,2] : 'hi'}          # 키값으로 리스트는 쓸 수 없다 - 변하는 값
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

딕셔너리 요소 추가

>>> a = {1: 'a'}
>>> a[2] = 'b'                     # 키와 벨류값이 각각 2이고 b인 한 쌍 추가
>>> a[3] = [1, 2, 3]       
>>> a                        
{1: 'a', 2: 'b', 3: [1, 2, 3]}

딕셔너리 요소 삭제

>>> del a[1]                 # del 함수를 사용해서 del a[key]처럼 입력하면
>>> a                        # 지정한 key에 해당하는 {key : value} 쌍이 삭제
{2: 'b', 3: [1, 2, 3]}

 

딕셔너리에서 키값으로 벨류값 찾기

  • 딕셔너리 Key는 고유값이므로 중복되면 하나를 제외한 나머지 것들이 모두 무시된다.
# Key 사용해 Value 얻기
>>> a = {1:'a', 2:'b'}
>>> a[1]                # a[1]이 의미하는 것은 리스트나 튜플의 a[1]과는 전혀 다름
'a'                     # 딕셔너리[ ] 안 숫자 1은 두 번째 요소가 아니라 Key값이 1
>>> a[2]
'b'

# Key값이 중복될 때, 하나를 제외한 나머지 것들이 모두 무시된다
>>> a = {1:'a', 1:'b'}
>>> a
{1: 'b'}

 

딕셔너리 관련 함수들

  • Key 값 리스트 만들기(keys)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys()                               # 키값만모아 dict_keys객체 리턴
dict_keys(['name', 'phone', 'birth'])      # 리스트를 사용하는 것과 차이 없음

# dict_keys와 dict_values는 리스트처럼 쓸 수 있으나
# 리스트 고유 함수 쓸 수 없어서 리스트로 변환 필요
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> list(a.keys())                         
['name', 'phone', 'birth']
  • Value 값 리스트 만들기(values)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.values()                             # 벨류만모아 dict_values객체 리턴
dict_values(['pey', '0119993323', '1118']) # 리스트 사용과 동일하게 사용 가능
  • Key, Value 쌍 얻기(items)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.items()                             # dict_items 객체로 돌려줌
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])
  • Key: Value 쌍 모두 지우기(clear)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.clear()                             # 딕셔너리 안의 모든 요소를 삭제
>>> a
{}                                        # {}는 빈 딕셔너리 표현
  • Key로 Value얻기(get)
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> a.get('name')                         # x라는 key에 대응되는 value 값
'pey'                                     # a.get('name')은 a['name']와 동일한 결과

# 딕셔너리에 없는 키 대신 미리 정해 둔 디폴트 값 가져오게 하고 싶을 때
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.get('foo', 'bar')                   # get(x, '디폴트 값')
'bar'

# 딕셔너리에 없는 키로 값을 가져오려고 할 경우
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> print(a.get('nokey'))                 # a.get('nokey')는 None을 리턴
None                                      # None은 "거짓"이라는 뜻

>>> print(a['nokey'])                     # a['nokey']는 Key 오류를 발생
Traceback (most recent call last):        
  File "<stdin>", line 1, in <module>
KeyError: 'nokey'
  • 있으면 해당 밸류를 출력하고 없으면 뒤에 있는 값 출력(setdefault)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.setdefault('Apple', '없음')
없음
  • 해당 Key가 딕셔너리 안에 있는지 조사하기(in)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> 'name' in a                           # 딕셔너리 a에 name 키값이 있으면 True
True
>>> 'email' in a                          # 딕셔너리 a에 name 키값이 없으면 False

 

Reference

반응형