파이썬 자료구조
작성일
해시
파이썬에서 해시(Hash)
는 딕셔너리(dictinary, dict)라는 자료구조로 구현할 수 있다.
# dict = {key(키) : value(값)}
dict = {'apple' : 3, 'banana' : 4}
해시는 인덱스 값을 숫자가 아닌 다른 값으로 사용하려고 할 때나, 빠른 접근과 탐색이 필요할 때 사용하면 좋다.
딕셔너리는 리스트에 비해 빠른 시간 복잡도를 가지고 있기 때문에 원소를 추가, 삭제 등이 많을 때에는 딕셔너리를 사용하는 것이 효율적이다.
get() 메서드
딕셔너리에서 원소를 가져오는 방법이다.
get(key) # 딕셔너리에 key에 해당하는 value 값을, 없으면 None을 반환.
get(key, x) # 딕셔너리에 key 값이 없는 경우, x를 반환함.
예제 코드
nums = [3,4,5]
d = {3: 2, 1: 1, 2: 1}
for n in nums:
print(d.get(n))
print(d)
# 결과값
# 2
# None
# None
nums = [3,1,2,3]
d = {}
for n in nums:
print(d.get(n))
# d.get(n, 0): d에 n값이 없으면 0을 반환함
d[n] = d.get(n, 0) + 1
print(d)
# 결과값
# {3: 2, 1: 1, 2: 1}
해시 for문 조회
d = {3: 2, 1: 1, 2: 1}
for key, value in d.items():
print(key, value)
dict = {'apple' : 3, 'banana' : 0}
result = [k for k, v in dict.items() if v == 0]
print(result)
# 결과값
# ['banana']
clothes = [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
d = {}
for name, key in clothes:
if d.get(key):
d[key] += [name]
else:
d[key] = [name]
print(d)
# 결과값
# {'headgear': ['yellow_hat', 'green_turban'], 'eyewear': ['blue_sunglasses']}