defaultdict
- Dict type의 값에 기본 값을 지정할 수 있는 dictionary 클래스
- Dict의 신규 값 생성 시 유용한다.
from collections import defaultdict
기존의 Dict
d = dict()
print(d['first'])
기본 dict를 사용하게 되면 key = 'first'인 item이 없기 때문에 출력하였을 때 에러가 발생한다.
defaultdict 사용
from collections import defaultdict
d = defaultdict(lambda : 0) #Default 값을 0으로 지정
print(d['first'])
하지만 defaultdict를 이용하여 기본 값을 0으로 지정하고 출력하였을 때
key = 'first'인 아이템을 추가하지 않아도 0이 출력된다.
- list, set, dict, int와 같은 자료형 또한 기본 값으로 지정할 수 있다.
from collections import defaultdict
d = defaultdict(list) #Default 값을 list로 지정
for i in range(5) :
d[i].append(i) # key : i 인 list에 i 추가
d[i].append(i*i) # key : i 인 list에 i의 제곱 추가
print(d.items())
defaultdict를 이용한 단어 개수 세기
- 하나의 지문에 각 단어들이 몇 개나 있는지 세고 싶을 경우 defaultdict를 이용하여 쉽게 구할 수 있다.
- Text-mining 접근법 - Vector Space Model
우선 영어 문장을 준비한다.
text = """A press release is the quickest and easiest way to get free publicity. If well written, a press release can result in multiple published articles about your firm and its products. And that can mean new prospects contacting you asking you to sell to them. Talk about low-hanging fruit! What's more, press releases are cost effective. If the release results in an article that (for instance) appears to recommend your firm or your product, that article is more likely to drive prospects to contact you than a comparable paid advertisement.However, most press releases never accomplish that. Most press releases are just spray and pray. Nobody reads them, least of all the reporters and editors for whom they're intended. Worst case, a badly-written press release
simply makes your firm look clueless and stupid.""".lower().split()
print(text)
"영어 지문".lower() 을 실행하여 영어 문장을 모두 소문자로 변환한 후
"영어 지문".split()을 통하여 빈칸을 기준으로 문자열을 분리하여 list로 변환하였다.
이제 defaultdict를 이용하여 단어 개수를 세보자.
from collections import defaultdict
word_count = defaultdict(lambda : 0)
for word in text :
word_count[word] += 1
for k, v in word_count.items():
print(k + " : " + str(v) + "개")
defaultdict를 이용하여 기본 값을 0으로 지정한 후
text list의 단어들을 key 값으로 참조할 때마다 1을 더하면 간단하게 단어 개수를 셀 수 있다.
조금 더 심화하여 위의 defaultdict를 Ordereddict를 이용하여 단어 개수로 정렬해보자.
from collections import OrderedDict
word_count_sorted = OrderedDict(sorted(word_count.items(), key = lambda t : t[1], reverse = True))
for k, v in word_count_sorted.items():
print(k + " : " + str(v) + "개")
Python Collections의 defaultdict에 대하여 살펴보았다.
'About > Python' 카테고리의 다른 글
[Python] Iterable & Iterator (2) | 2021.01.20 |
---|---|
[Python] Counter (단어 개수 세기) (2) | 2020.12.30 |
[Python] Collections - OrderedDict (0) | 2020.12.27 |
[Python] Collections - deque (0) | 2020.12.20 |
[Python] Lambda & Map & Reduce (0) | 2020.12.20 |