728x90
defaultdict
Python의 collections 모듈에 defaultdict이 있다.
코딩테스트 풀때, 딕셔너리가 필요한 문제 풀 때 굉장히 편리하다
일반 딕셔너리는 key 값을 미리 넣어주지 않았다면 value에 대한 연산을 할 때 KeyError 에러가 난다.
words = ["apple", "apple", "iphone", "mac", "mac", "mac"]
dict_temp = {}
dict_temp[words[0]] += 1
그렇다보니 defaultdict을 모르기 이전에는 이런식으로 코드를 짠 것 같다
for word in words:
if word in dict_temp.keys():
dict_temp[word] += 1
else:
dict_temp[word] = 1
이런 번거로움을 덜어주는 게 바로 defaultdict인데, key 호출과 동시에 미리 지정한 기본값이 할당된다.
words = ["apple", "apple", "iphone", "mac", "mac", "mac"]
d_dict = collections.defaultdict(int) # int type으로 초기화
d_dict[words[0]] += 1
print(d_dict)
기존에 없던 key를 호출할 때 문제없이 연산이 진행되는 걸 확인할 수 있다. 이 경우 int로 초기화 했을 때, 0이 default값으로 저장된다.
int이외의 다른 type도 가능하다
예를 들어서 list type의 경우
d_dict = collections.defaultdict(list) # int type으로 초기화
d_dict["apple"].append(1)
print(d_dict)
defaultdict(<class 'list'>, {'apple': [1]})
이렇게 잘 들어간다 !!!
lambda 식을 이용하여 defaultdict을 초기화할 수도 있다.
d_dict = collections.defaultdict(lambda: "hello") # int type으로 초기화
print(d_dict[1])
hello
728x90
'Programming Languages > Python' 카테고리의 다른 글
Python k 진수로 바꾸기 (0) | 2022.09.30 |
---|---|
python re.sub - 정규화표현식으로 문자열 바꿔주기 (1) | 2022.09.11 |
Python 다익스트라 최단경로 알고리즘 (0) | 2022.01.31 |
python bisect, bisect_left, bisect_right (0) | 2022.01.25 |
[Python] 파이썬 join 함수 (파이썬 문자열 리스트 합치기) (0) | 2022.01.22 |