세조목

PYTHON 정리(점프투파이썬 - 딕셔너리 자료형)(23.12.31) 본문

데이터 분석 공부/Python

PYTHON 정리(점프투파이썬 - 딕셔너리 자료형)(23.12.31)

세조목 2023. 12. 31. 17:26
  • 본 내용들은 PYTHON을 공부하면서 차후 제가 복습하기위해 정리해놓은 것으로 제가 새롭게 알게된 내용들만을 정리하였습니다. 또한 배움이 부족하여 미처 다 파악하지 못한 부분들도 많으니 혹시나 이 포스팅을 보시는 분들께서는 다른 포스팅, 도서, 강의도 함께 참고하시기 바라겠습니다.

 

딕셔너리KEY값과 VALUE값을 한 쌍으로 가지는 자료형이다.

사전이라는 뜻을 가진 딕셔너리라는 이름을 사용하는 이유도

사전이 단어와 뜻 한 쌍으로 이루어진것처럼

딕셔너리도 KEY값과 VALUE값이 한 쌍을 이루고 있기 때문이다.

 

1. 딕셔너리 생성

딕셔너리는 중괄호를 사용한다.

리스트 [  ] / 대괄호
튜플 (  ) / 소괄호
딕셔너리 {  } / 중괄호

이 때 중괄호 안에는 'KEY값 : VALUE값' 을 넣어주면 되고 여러쌍 존재할 경우 쉼표로 구분해준다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}

asd = {"list" : [1, 2, 3]}

asd = {"list" : (1, 2, 3)}

 

딕셔너리에는 위 예시에서처럼 리스트와 튜플도 넣을 수 있다.

 

2. 쌍 추가

딕셔너리에 쌍을 추가하기 위해서는 ' 변수[key값] = 'value값' '을 입력해주면 된다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
asd["height"] = 177
asd
>>> {name : kim, age : 37, gender : male, height : 177}

 

key값에는 문자열, 숫자 모두 입력할 수 있고,

value값에도 문자열, 숫자, 자료형(리스트, 튜플, 딕셔너리)을 입력할 수 있다.

 

3. 요소 제거

반대로 요소를 제거할 때는 어떻게 하면 될까?

리스트에서처럼 del함수를 사용하는데

del 변수[key값]을 입력해주면 된다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
del asd["name"]
asd
>>> {'age': 37, 'gender': 'male'}

위 예시의 경우 'name'이라는 key값을 입력해주니 value값인 'kim'도 함께 제거된걸 확인할 수 있다.

 

4. 인덱싱

리스트와 튜플에서 인덱싱을 할 때는

변수[순서] 를 입력해야했다.

그런데 딕셔너리에서는 변수[키값]을 입력해줘야한다.

딕셔너리에 없는 key값을 입력할 경우 오류 문구가 출력된다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
asd["name"]
>>> 'kim'

 

5. 주의사항

● 딕셔너리에서 key는 고유한 값임

이게 무슨 말이냐하면

value값은 다른데 key값을 동일하게 지정해두면 가장 마지막 쌍만 출력된다.

아래와 같이 말이다.

a = {"name" : "Kim", "name" : "Mary"}
a
>>> {"name" : "Mary"}

 

● 리스트는 key값으로 사용할 수 없음

딕셔너리의 key값으로 쓸 수 있는지 없는지를 판별할때는 'key값의 변함'이 기준이된다.

리스트의 경우 요소들을 얼마든지 수정할 수 있다.

튜플의 경우 요소들을 절대 수정할 수 없다.

그렇기 때문에 딕셔너리의 key값에 리스트는 넣을 수 없고, 튜플은 넣을 수 있는 것이다.

# 리스트 삽입
a = {["name", "fruit"] : "kiwi", "number" : 1}
a
>>> Traceback (most recent call last)
	<ipython-input-47-79721f8e7131> in <cell line: 1>()
    TypeError: unhashable type: 'list'
    
# 튜플 삽입
a = {("name", "fruit") : "kiwi", "number" : 1}
a
>>> {('name', 'fruit'): 'kiwi', 'number': 1}

 

6. 딕셔너리 관련 함수

  1. keys
  2. values
  3. items
  4. clear
  5. get
  6. in

● keys

keys 함수는 딕셔너리에 포함된 모든 key값을 출력해준다.

이 때 단순히 key값만을 출력하는 것이 아니라

dict_keys( ) 안에 key값들이 리스트 형태로 출력된다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
asd.keys()
>>> dict_keys(["name", "age", "gender"])

만약 for문을 활용해서 key값들을 순서대로 출력하고 싶다면 아래와 같이 코드를 작성해볼 수 있다.

for i in asd.keys():
	print(i)
>>> name
>>> age
>>> gender

 

● values

딕셔너리의 value값들을 모두 출력하는 함수로

dict_values([value값])으로 출력된다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
asd.values()
>>> dict_values(["kim", 37, "male"])

 

● items

items함수는 딕셔너리에 있는 모든 key와 value 쌍을 출력하는 함수다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
asd.items()
>>> dict_items([("name", "kim"), ("age", 37), ("gender", "male")])

이 때 key와 value값은 튜플로 묶이고 각각의 쌍들은 하나의 리스트로 묶인다.

 

● clear

clear함수는 딕셔너리 안의 모든 요소를 제거하는 함수다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
asd.clear()
>>> {}

 

● get

get함수는 특정 key값에 해당하는 value값을 반환한다.

인덱싱과의 차이점이라고한다면

get함수는 딕셔너리에 없는 함수를 가져오려고 할 때 None을 리턴하지만

인덱싱은 오류를 발생시킨다는 점이다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
asd.get("name")
>>> "kim"

print(asd.get("tel"))
>>> None

 

● in

in함수는 특정 key값이 딕셔너리 안에 있는지를 조사하는 함수다.

asd = {"name" : "kim", "age" : 37, "gender" : "male"}
"name" in asd
>>> True

"number" in asd
>>> False

위 예시를 보면 key값 "name"은 asd라는 딕셔너리에 존재하기 때문에 True를 반환하고

"number"라는 key값은 존재하지 않기 때문에 False를 반환한다.