본문 바로가기
Python

11. 딕셔너리(dictionary) 특징

by To올라운더 2023. 6. 29.
반응형

[1] 딕셔너리(dictionary) 특징

 

딕셔너리(dictionary)는 중괄호 안에 콜론 ':' 으로 key와 value 값을 구성하여 나타내는자료유형으로

자료 유형마다 매번 강조하는 여러 자료형의 특징과 비교해보면

구분 튜플(tuple) 리스트(list) 집합(set) 딕셔너리(dictionary)
공통사항 1개 이상의 데이터(값)을 관리(저장)할 때 사용
형태 소괄호 - ( ) 대괄호 - [ ] 중괄호 + 콤마 - { , } 중괄호 - { Key : Value }
순서(index) O O X X
중복허용 O O X (Value) X (Key)
수정 가능 X O O O

딕셔너리(dictionary)는 순서가 없고 사전이라는 의미처럼 Key와 Value가 한 쌍을 이루는 정보값으로 구성된다.

Value의 중복은 허용하나, Key의 중복은 불가한 자료 유형이다.

외부 프로그램간의 호출을 위해 API에서 주로 사용되는 

json(Java Script Object Notation)과 형태가 같아 (실제 내부구조나 용도적으로는 다름)

python에서 json 모듈만 사용하더라도 상호간 변경이 가능하다.

 

 (*json : java에서 사용하는 자료 유형으로 쉽게 읽고, 작성이 가능하다는 장점으로 자주 쓰인다.

            서버와 서버 또는 서버와 클라이언트간의 통신시 xml과 더불어 가장 많이 쓰이는 자료유형이다.)

 

아래에서는 dictionary 를 '딕셔너리' 또는 'dict' 로 줄여서 사용하겠다.

 

딕셔너리를 사용하는 이유는 불필요한 검색 시간을 줄이기 위해서이다.

리스트 같은 형태의 자료유형은 순차적으로 입력된 자료를 확인해야 하지만,

딕셔너리는 사전처럼 원하는 항목만 찾아서 사용하기 때문에 좀 더 효율적인 접근이 가능하다.

 

1. 딕셔너리 만들기(선언)

  - 딕셔너리는 중괄호와 콜론'{  key : value }' 를 이용하여 만들며, key 값은 문자열(string)과 튜플(tuple)만 사용 가능하다.

  - value는 자료 유형에 관계 없이 가능

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}
print(type(dict1))
print(dict1)

 

2. 딕셔너리 검색 (key -> value)

  - 딕셔너리는 key와 value가 쌍을 이루는 만큼 key를 이용하여 value 값을 찾을 수 있다.

      : 사전에서 원하는 단어의 뜻을 찾듯이 key를 통해 value를 확인한다.

  - 방법은 대괄호 ' [ ] ' 를 이용하는 방법과 get함수를 이용하는 방법이 있다.

    : 다른 자료형에서 대괄호를 통해 인덱싱을 하는 것과 달리 딕셔너리에서는 대괄호 안에 key 값을 넣으면 value 값을 확인할 수 있다.

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}
# 방법 1
print(dict1['name']) # 결과 값 : mike
print(dict1['age']) # 결과 값 : 25

# 방법 2
print(dict1.get('name')) # 결과 값 : mike
print(dict1.get('age')) # 결과 값 : 25

  - 두 결과의 차이는 해당 key 값이 있을 때에는 동일하나, 해당 key 값이 없을 때에는 대괄호는 Error, get()은 None을 출력한다.

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}

print(dict1.get('number')) # 결과 값 : None

print(dict1['number']) # 결과 값 : Error

 

3. 딕셔너리 내부에 해당 key가 있는지 검색

  - key 값을 통해 value를 확인할 수 있지만, 해당 딕셔너리가 우리가 원하는 key 값을 가지고 있는지는 확인이 필요하다.

  : 결과는 앞에서 배운 boolean으로 나타난다.

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}

print('name' in dict1) # name이 dict1의 key로 있는지 확인. 결과 값 : True
print('number' in dict1) # number이 dict1의 key로 있는지 확인. 결과 값 : False

  - 위의 2번 검색에서 보듯이 Error를 제외하기 위해, 해당 키값의 유무를 확인후 대괄호'[ ]'를 이용하면 error가 발생하는 상황을 사전에 예방할 수 있다.(*조건문(if)은 곧 배우실 겁니다.)

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}

if 'number' in dict1:
    print(dict1['number'])
else:
    print('number 은 dict1 자료에 없는 key 값 입니다.')

4. 딕셔너리가 가지고 있는 key 값 확인하기

  - 그럼 해당 딕셔너리의 key 값의 종류를 확인하는 방법은? keys를 이용하면 된다.

  - 유의할 사항은 해당 결과는 list 형태로 출력된다.

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}

print(dict1.keys()) # key 값 출력
print(dict1.values()) # value 값 출력
print(dict1.items()) # key와 value 값 함께 출력

 

5. 딕셔너리 수정

 - 딕셔너리는 key를 통해 value를 확인하기 때문에 key 값을 변경하는 경우는 없다. 삭제나 추가만 가능하며, value 값의 수정은 대괄호' [ ] ' 를 통해 해당 key를 선언한 후, 변경될 값을 입력해주면된다.

 

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}

print(dict1['weight']) # 수정 전 결과 값 : 80
# value 값만 수정
dict1['weight'] = 82
print(dict1['weight']) # 수정 후 결과 값 : 82

6. 딕셔너리 요소 추가(key, value 한 쌍)

  - 수정하는 방법과 동일한 방식으로 key와 value 값을 입력하면, 해당 key가 없을 때 신규로 key와 value가 추가된다.

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}

dict1['number'] = '010-1234-5678'
print(dict1.keys())
print(dict1)

7. 딕셔너리 요소 삭제

  - 요소의 삭제 또한 대괄호를 이용하여 진행한다.

  : height 요소가 삭제된 것을 확인할 수 있다.

dict1 = {'name':'mike', 'height' : 180, 'weight' : 80, 'age' : 25}

del dict1['height']
print(dict1.keys())
print(dict1)

 

8. 문자열(또는 json) -> 딕셔너리

  - 서두에 한번 언급된 것과 같이 json 이나 문자열(string)으로 된 자료를 딕셔너리로 변경할 수 있다.

  - ast 모듈을 사용하는 방법과 json 모듈을 사용하는 방법을 살펴보겠다.

str1 = "{'name':'mike', 'height' : '180', 'weight' : '80', 'age' : '25'}"

print(type(str1)) # 결과 값 : str


from ast import literal_eval

string_to_dict1= literal_eval(str1)
print(type(string_to_dict1)) # 결과 값 : dict
print(string_to_dict1)
print(string_to_dict1['name']) # 결과 값 : mike

 - json 모듈은 숙제로 남겨놓겠습니다.

 

 

드디어 길었던 자료형의 특징에 대한 포스팅이 드디어 끝이났다.

이제 제법 프로그램 같은 모양을 가질 수 있는 조건문과 반복문만이 남아있다.

To be continue....

반응형

'Python' 카테고리의 다른 글

13. 파이썬 반복문(for)  (0) 2023.07.01
12. 파이썬 조건문(if)  (0) 2023.06.30
10. 파이썬 집합(set) 특징  (0) 2023.06.27
09. 파이썬 리스트(list) 특징  (0) 2023.06.26
08. 파이썬 튜플(tuple) 특징  (0) 2023.06.25