중괄호({ }) 안에 키: 값
형식으로 저장되어 있고 각 키와 값은 콤마(,)로 구분해준다.
game_character1 = {'health': 500, 'mana': 300, 'armor': 20}
# 게임 캐릭터를 예로 들었을 때 해당 캐릭터는 체력, 마나, 아머의 key와
# key에 해당하는 value도 같이 갖고있다.
키: 값
쌍으로 추가한다. 키만 지정하면 값에 None을 저장한다.x = {'a': 1, 'b': 2, 'c': 3}
x.setdefault('d')
x
# x = {'a': 1, 'b': 2, 'c': 3, 'd': None}
x.setdefault('e', 5)
x
# x = {'a': 1, 'b': 2, 'c': 3, 'd': None, 'e': 5}
키: 값
쌍으로 추가한다.x = {'a': 1, 'b': 2, 'c': 3}
x.update(a = 10)
x
# x = {'a': 10, 'b': 2, 'c': 3}
키가 없을 경우에는 setdefault와 같이 추가된다.
x = {'a': 1, 'b': 2, 'c': 3}
x.update(a = 10, d = 4)
x
# x = {'a': 10, 'b': 2, 'c': 3, 'd': 4}
위는 key가 string 타입이다.
int형 key는 dictionary처럼 {키: '값'}
넣어야 한다.
y = {1: 'a', 2: 'b'}
y.update({1: 'A', 3: 'C'})
y
# y = {1: 'A', 2: 'b', 3: 'C'}
다음처럼 list와 tuple의 형태도 가능하다. [[키1, 값1], [키2, 값2]]
y = {1: 'a', 2: 'b'}
y.update([[3, 'c'], [4, 'd']])
y
# y = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
x = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
x.pop('a')
# 1
x
# {'b': 2, 'c': 3, 'd': 4}
[]
을 사용하고 리턴값이 없다.x = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
del x['a']
x
# {'b': 2, 'c': 3, 'd': 4}
x.popitem()
x.clear()
x = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
x.get('a')
# 1
키: 값
을 다 가져온다.x.items()
# dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
x.keys()
# dict_keys(['a', 'b', 'c', 'd'])
x.values()
# dict_values([1, 2, 3, 4])
apb = ['a', 'b', 'c']
x = dict.fromkeys(apb)
x
# {'a': None, 'b': None, 'c': None}
y = dict.fromkeys(apb, 1)
y
# {'a': 1, 'b': 1, 'c': 1}
for key, value in dictionary.items() 로 사용한다.
x = {'a': 1, 'b': 2, 'c': 3}
for key, value in x.items():
print(key, value)
# a 1
# b 2
# c 3
for key, value in x.keys():
for key, value in x.values():
keys = ['a', 'b', 'c']
x = {key: value for key, value in dict.fromkeys(keys).items()}
x
# {'a': None, 'b': None, 'c': None}
여기서 key: value 대신 특정 값을 넣으면 value의 값이 바뀐다.
x = {'a': 1, 'b': 2, 'c': 3}
x = {key: value for key, value in x.items() if value != 2}
x
# {'a': 1, 'c': 3,}
다음과 같이 이중 dictionary를 사용할 수 있다.
dictionary = {key1: {keyA: valueA}, key2: {keyB: valueB}}
이때 keyA에 접근하려면 이렇게 사용한다.
dictionary[key1][keyA] # valueA 출력
x = y
같이 할당해준 뒤 x값을 변경하면 어떻게 될까?x = {'a': 1, 'b': 2, 'c': 3}
y = x
x is y
# True
x.setdefault('d', 4)
# x에 키와 값 추가
x is y
# True
x와 y를 같은 값으로 할당한 이후에 x에 값을 추가했는데, y의 값도 같이 바꼈다. 이를 확인해 보면 x와 y는 같은 주소를 포인터 하고 있음을 알 수 있다.
y = x.copy()
x is y
# False
x == y
# True
그래서 copy()를 사용하면 내용 그대로 dictionary는 독립되게 만들 수 있다.
import copy
y = copy.deepcopy(x)