[파이썬] 반복문으로 defaultdict append
조회수 327회
dfs[0]
, dfs[1]
~ dfs[8]
까지 데이터가 있습니다.
from transformers import AutoTokenizer
from collections import defaultdict
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased", do_lower_case = True)
# 0번
word_freqs_0 = defaultdict(int)
for text in dfs[0]['comment']:
words_with_offsets = tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(text)
new_words = [word for word, offset in words_with_offsets]
for word in new_words:
word_freqs_0[word] = word_freqs_0[word] + 1
# 1번
word_freqs_1 = defaultdict(int)
for text in dfs[1]['comment']:
words_with_offsets = tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(text)
new_words = [word for word, offset in words_with_offsets]
for word in new_words:
word_freqs_1[word] = word_freqs_1[word] + 1
이런식으로 8번까지 작성했습니다.
위 문장을 반복문을 사용해 word_freqs[0]
~ word_freqs[8]
로 만들고 싶은데 어떻게 해야 할까요
word_freqs = defaultdict(int)
변수를 선언후 append
로 입력하고 싶은데 잘 안되네요
1 답변
-
아주 단순한 리팩토링 문제인데요. 반복되는 코드를 함수로 모아서 빼는 겁니다.
# 0번 word_freqs_0 = defaultdict(int) for text in dfs[0]['comment']: words_with_offsets = tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(text) new_words = [word for word, offset in words_with_offsets] for word in new_words: word_freqs_0[word] = word_freqs_0[word] + 1 # 1번 word_freqs_1 = defaultdict(int) for text in dfs[1]['comment']: words_with_offsets = tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(text) new_words = [word for word, offset in words_with_offsets] for word in new_words: word_freqs_1[word] = word_freqs_1[word] + 1
여기에서 공통으로 반복되는 부분, 변경되는 부분을 찾아보면,
dfs[0]
,dfs[1]
이 바뀌었고,word_freqs_0
,word_freqs_1
이 바뀌었죠. 그리고 나머지는 다 똑같습니다. 이걸 자세히 보면, 어떤df
가 입력으로 주어지면,word_freq
(딕셔너리)를 반환하는 함수로 만들어 반복할 수 있다는 걸 알 수 있어요.def get_word_freq_from_df(df: pd.DataFrame): word_freq = defaultdict(int) for text in df['comment']: words_with_offsets = tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(text) new_words = [word for word, offset in words_with_offsets] for word in new_words: word_freq[word] = word_freq[word] + 1 return word_freq
함수 완성.
결국 이 덩어리를 단위로 다시 하고 싶은 걸 생각하면,
- 8개의 dfs[i] 에 대해서
- 각각의 word_freq 를 구하여 그걸 동일한 모양의 리스트로 만들자.
이걸 코드로 만들면
word_freqs = [] for df in dfs: word_freq = get_word_freq_from_df(df) word_freqs.append(word_freq)
이걸 리스트 컴프리헨션으로 다시 쓰면,
word_freqs = [ get_word_freq_from_df(df) for df in dfs ]
댓글 입력