참고자료

  1. https://wikidocs.net/16043

키 중복

dic = {
    'a': 2,
    'a': 5
}
print(dic) # {'a': 5}

새로운 key-value 추가

dic = {
    'a': 2
}
dic['b'] = 100
print(dic) # {'a': 2, 'b': 100}

Array to Dictionary

list = [('a', 10), ('b', 20)]
dic = dict(list)
print(dic) # {'a': 10, 'b': 20}

list = [(10, 'a'), (20, 'b')]
dic = dict(list)
print(dic) # {10: 'a', 20: 'b'}

복사

얕은복사

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
b = a.copy()
b['alice'].append(5)
print(b) # {'alice': [1, 2, 3, 5], 'bob': 20, 'tony': 15, 'suzy': 30}
print(a) # {'alice': [1, 2, 3, 5], 'bob': 20, 'tony': 15, 'suzy': 30}

b의 alice에만 5가 추가되어있을것 같지만, 실제로는 a에도 추가되어있다. 주소값을 복사했기 때문이다.

깊은복사

import copy
a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
b = copy.deepcopy(a)
b['alice'].append(5)

print(b) # {'alice': [1, 2, 3, 5], 'bob': 20, 'tony': 15, 'suzy': 30}
print(a) # {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}

copy 모듈을 써서 deepcopy를 하면 값이 완전히 복사된다

Update

한번에 여러 원소들을 업데이트할때 update함수를 쓰면 좋다. 없는 key는 추가된다.

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
a.update({'alice': 45, 'yoon': 100})
print(a) # {'alice': 45, 'bob': 20, 'tony': 15, 'suzy': 30, 'yoon': 100}

Loop

key

순서는 임의적이다.

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
for key in a :
    print(key)
    
# alice
# bob
# tony
# suzy

value

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
for val in a.values() :
    print(val)

# [1, 2, 3]
# 20
# 15
# 30

key, value

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
for k, v in a.items() :
    print(k, v)
    
# alice [1, 2, 3]
# bob 20
# tony 15
# suzy 30

in

array의 in이 값이 들어있는지 판별하는데 쓰였다면, dic에서 in은 key가 있는지를 찾는다.

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
if 'bob' in a:
    print("yes")
else:
    print("no")
    
# yes

delete

array처럼 요소 삭제가 가능하다

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
del a['alice']
print(a) # {'bob': 20, 'tony': 15, 'suzy': 30}

pop()도 가능하다

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
a.pop('alice')
print(a) # {'bob': 20, 'tony': 15, 'suzy': 30}

key check

dic.get()

key를 바탕으로 값을 가져온다. 해당 key가 없으면 None을 리턴한다.

a = {'alice': [1, 2, 3], 'bob': 20, 'tony': 15, 'suzy': 30}
print(a.get('bob')) # 20
print(a.get('zzm')) # None

이게 좋은점이, a['zzm'] 이런식으로 바로 접근하면 에러가 나는데 get을 쓰면 None을 돌려주니까 있는지 없는지 확신이 안들때 if문이랑 get이랑 같이 쓰면 좋다.