본문 바로가기
python& Django

파이썬 : 자료형 (dictionary) -작성 중

자료형 : 딕셔너리 (dictionary)

 

연관 배열 또는 해쉬(Hash) 라고도 하는 자료형으로 키와 값을 가지고 있다.

키 값에 대해서 연관되는 값을 저장해서 사용하고 싶을 때 사용한다. 사전의 단어와 뜻을 생각하면 쉽다.

딕셔너리의 형태는 아래와 같다.

dic = {
  "자료형1":"숫자",
  "자료형2":"문자열",
  "자료형3":"리스트",
  "자료형4":"튜플",
  .
  .
}

 

딕셔너리에서 key는 고유한 값이어야 한다.

key 값이 중복되서 들어갈 수 있지만, 특정 키에 매치되는 값을 얻고 싶을 때 문제가 될 수 있다.

 

 

딕셔너리의 key 값으로 들어갈 수 있는 자료형

딕셔너리의 키 값으로 튜플은 사용이 가능하다.

하지만 리스트와 딕셔너리는 사용할 수 없다. 변경 될 수 있는 값은 키 값으로 쓰일 수 없기 때문이다.

키 값으로 사용할 수 있는가는 변경이 불가한지의 여부이다.

 

 

딕셔너리를 만드는 방법

""" 빈 딕셔너리 """
dic1 = {}
dic1 = dict()


""" {} 사용할 떄 """
dic = {
  "키":"값",
}


""" dict() 사용할 때"""
# 이 방식은 key 의 값이 자동으로 스트링 값으로 바뀐다. 따라서 숫자 혹은 "" 넣으면 에러 발생
dict(key=val, key=val)


"""dict(zip([], [])) 사용할 때"""
# 키와 값이 들어있는 각각의 리스트를 파라미터로 넘겨주면, 자동으로 키와 값 쌍으로 들어감.
# 이 때 키나 값의 요소의 갯수가 정확하게 맞지 않는다면, 넘치는 쪽이 무시된다.
dir2 = dict(zip(["name", "height", "weight"], ["sss", 182]))
dir3 = dict(zip(["name", "height", "weight"], ["sss", 182, 88 , "developer"]))
print(dir2) # {'name': 'sss', 'height': 182}
print(dir3) # {'name': 'sss', 'height': 182, 'weight': 88}


""" dict([(key, val), (key, val)] """
# 하나의 리스트 안에 여러 개의 튜플을 저장해서 생성
dir4 = dict([("name", "sss"), ("height", 180)])
print(dir4) # {'name': 'sss', 'height': 180}


""" dict({key : val, key : val}) """
# dict() 내장 함수 안에 {} 를 사용

 

 

딕셔너리 값 할당

""" [] 를 활용하여 키에 접근해서 값 할당 """
dic1 = dict({
  "name":"sss",
  "height": 180
})

dic1["name"] = "aaa"
print(dic1) # {'name': 'aaa', 'height': 180}


""" setdefault(key, value) 메서드를 사용해서 키와 값 할당 """
# 키만 지정하면 값은 None
dic2 = {}
dic2.setdefault("name")
print(dic2) # {'name': None}


""" update(key = value) """
dic2.update(name = "sss")
print(dic2)

# 해당하는 키의 값을 수정한다.
# 키가 없다면 추가한다.
# , 를 통해서 여러 개를 한꺼번에 수정하거나 추가할 수 있다.
# 키가 문자열 일 때만 사용할 수 있다.
# 키가 숫자일 경우네는 update(딕셔너리) 형태로 수정할 수 있다.
# update({1:"a", 2:"b"})


""" 리스트와 튜플을 활용하기 """ 
# 이 때 리스트와 튜플은 키-값 쌍으로 이루어져 있어야 한다.
# update([키, 값], [키, 값])
# update((키, 값), (키, 값))

""" update(zip([], [])) """
# dic.update(zip([], []))

 

 

딕셔너리 값 삭제

""" pop() """
# 문법 오류. 리스트와 햇갈리지 말자.
x = {'a': 0, 'b': 0, 'c': 0, 'd': 0}
x.pop() # TypeError: pop expected at least 1 argument, got 0


""" pop(키) """ 
# 해당하는 키의 값와 값을 딕셔너리에서 삭제하면서, 값을 반환한다.
# 키 값이 없다면 key error 발생
x = {'a': 0, 'b': 0, 'c': 0, 'd': 0}
y = x.pop("a")


""" pop(키, 기본 값) """
# 키가 없을 때, 지정한 기본 값을 반환한다.
x = {'a': 0, 'b': 0, 'c': 0, 'd': 0}
y = x.pop("A", 1)
print(x) # 삭제되지 않음
print(y) # 1


""" del dic[키] """
# 생략


""" popitem() 임의의 키-값 쌍 삭제하기 """
# 임의의 키-값 쌍을 삭제하고, 삭제한 키-값 쌍을 튜플로 반환.
# 3.6 이상 버전에서는 마지막 키-값 쌍을 삭제.
# 3.5 이하 버전에서는 임의의 키-값 쌍을 삭제.
x = {'a': 0, 'b': 0, 'c': 0, 'd': 0}
a = x.popitem()
print(x)
print(a)


""" clear() 모든 키와 값 삭제 """
# 생략

 

딕셔너리 키, 값 가져오기

x = {'a': 0, 'b': 0, 'c': 0, 'd': 0}

""" get(키) """
# 해당 키의 값 가져오기
# 값을 가져옴
x.get("a") # 0


""" items() """
# 키 값 쌍 모두 가져오기
x.items() # dict_items([('a', 0), ('b', 0), ('c', 0), ('d', 0)])


""" keys() """
# 모든 키 가져오기
x.keys() # dict_keys(['a', 'b', 'c', 'd'])


""" values() """
# 모든 값 가져오기
x.values() # dict_values([0, 0, 0, 0])

 

리스트와 튜플로 딕셔너리 만들기

""" 리스트와 튜플로 딕셔너리 만들기 """
""" fromkeys(iter) """
keys = ["a", "b", "c", "d"]

# 키만 넣으면 기본 값 None 으로 생성
dic = dict.fromkeys(keys)
# >> {'a': None, 'b': None, 'c': None, 'd': None}


# 지정한 값으로 설정하기
dic = dict.fromkeys(keys, 100)
# >> {'a': 100, 'b': 100, 'c': 100, 'd': 100}

 

없는 키에 접근했을 때 KeyError 가 발생하지 않도록 

""" defaultdict 사용 """
from collections import defaultdict

dic = defaultdict(int) # int 로 기본값 생성
dic['asdfasdfasdf'] # 0


""" 0이 아닌 다른 값을 기본값으로 설정하기 (기본값 생성 함수를 만들어야 함) """
dic = defaultdict(lambda: "default") # int 로 기본값 생성
dic['asdfasdfasdf'] # "default"

 

 

 

 

키가 있는지 없는지를 검사하고 싶은 경우에는 in 을 사용한다.

dic1 = dict({
  "name":"sss",
  "height": 180
})

print("name" in dic1) # True, 키가 없는 경우 False 를 반환한다.

 

딕셔너리의 갯수를 구하면, 키의 갯수가 나타난다.

dic1 = dict({
  "name":"sss",
  "height": 180
})

print(len(dic1)) # 2

 

 

 

===참조

https://dojang.io/course/view.php?id=7

 

강좌: 파이썬 코딩 도장

모두 펼치기모두 접기

dojang.io

 

'python& Django' 카테고리의 다른 글

파이썬 : 람다 (lambda)  (0) 2020.10.15
파이썬 : If 조건문  (0) 2020.10.08
파이썬 : 자료형 튜플(tuple)  (0) 2020.10.08
파이썬 : 자료형 (List)  (0) 2020.10.08
파이썬 : 자료형 (숫자, 문자)  (0) 2020.10.08