dic = {
"자료형1":"숫자",
"자료형2":"문자열",
"자료형3":"리스트",
"자료형4":"튜플",
.
.
}
""" 빈 딕셔너리 """
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}
""" defaultdict 사용 """
from collections import defaultdict
dic = defaultdict(int) # int 로 기본값 생성
dic['asdfasdfasdf'] # 0
""" 0이 아닌 다른 값을 기본값으로 설정하기 (기본값 생성 함수를 만들어야 함) """
dic = defaultdict(lambda: "default") # int 로 기본값 생성
dic['asdfasdfasdf'] # "default"
dic1 = dict({
"name":"sss",
"height": 180
})
print("name" in dic1) # True, 키가 없는 경우 False 를 반환한다.
dic1 = dict({
"name":"sss",
"height": 180
})
print(len(dic1)) # 2
리스트 표현식과 마찬가지로 딕셔너리도 for 반복문과 if 조건문을 사용하여 딕셔너리를 생성할 수 있다.
keys = ['a', 'b', 'c', 'd']
x = {key: value for key, value in dict.fromkeys(keys).items()}
x
{'a': None, 'b': None, 'c': None, 'd': None}
x = {key: value for key, value in dict.fromkeys(keys).items()}
{key: 0 for key in dict.fromkeys(['a', 'b', 'c', 'd']).keys()} # 키만 가져옴
{value: 0 for value in {'a': 10, 'b': 20, 'c': 30, 'd': 40}.values()} # 값을 키로 사용
{value: key for key, value in {'a': 10, 'b': 20, 'c': 30, 'd': 40}.items()} # 키-값 자리를 바꿈
x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
x = {key: value for key, value in x.items() if value != 20}
{'a': 10, 'c': 30, 'd': 40}
딕셔너리는 특정 키를 삭제하는 pop
메서드만 제공하고 특정 값을 삭제하는 메서드는 제공하지 않는다.
또한 아래와 같이 반복문을 사용해서 특정 값을 삭제하려고 해도, 삭제되는 순간 딕셔너리의 크기가 바뀌기 때문에 에러가 발생할 수 있다. 따라서 위와 같이 특정 값을 가진 데이터를 제외하여, 재할당하는 식으로 삭제가 가능하다.
출처: 코딩도장 파이썬 (https://dojang.io/mod/page/view.php?id=2309)