딕셔너리 이용한 단어 빈도 계산문제 질문드립니다.

조회수 2548회

f=open('c:/doit/원본.txt', 'r', encoding='utf-16')

r=open('c:/doit/어절 빈도 통계.txt', 'w', encoding='utf-16')

data=f.read()

data2=data.split()

count={}

for word in data2:

if word in count:

    count[word] +=1

else:
    count[word] = 1

for key in count:

r.write("%s: %d" % (key,count[key])+"\n")

print("작업완료")

r.close()

이런 코드를 봤는데요. 다섯 번째 줄에서 count={}라고 정의할 경우 안에 아무것도 없는데, x in y라고 할때 y라는 집합안에 x라는 원소가 있는것 처럼

딕셔너리라는 집합 안에 '워드'라는 원소가 있어야 하는 것 아닌가요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 단어 빈도 계산은 다음과 같이 할 수 있습니다.

    >>> Counter(["a", "b", "a"])
    Counter({'a': 2, 'b': 1})
    

    위의 코드를 바꾼다면 아래처럼 바꿀 수 있겠네요

    from collections import Counter
    with open('c:/doit/원본.txt', 'r', encoding='utf-16') as f:
        data=f.read()
        data2=data.split()
        count = Counter(data2)
    with open('c:/doit/어절 빈도 통계.txt', 'w', encoding='utf-16') as f:
        for w,c in count.items():
            f.write("%s: %d" % (w,c)+"\n")
    

    아 코드 블럭 처리가 부분적으로 되어 있어 제가 착각을 했네요 온전한 코드입니다.

    위의 코드를 설명해드리자면 data2에서 단어를 하나씩 추출하여 count 딕셔너리 안에 단어가 존재하지 않으면 1로 초기화를 해주고 만약 단어가 존재한다면 +1씩 증가시켜주는 코드입니다.

    • 답변 달아주셔서 감사합니다. 그런데 아직 이해가 잘 안되네요 ㅠㅠ 왜 count라는 집합안에 아무것도 없는데 word라는 미지수가 검색이 되는 건가요? 리스트나 문자열을 'if x in y'라고 가정하면 y라는 집합안에 미지수 x들이 있다고 알고 있는데 딕셔너리는 다른 건가요? 알 수 없는 사용자 2018.6.14 16:17
    • if x in 딕셔너리 키값이라고 생각하시면 됩니다 clianor 2018.7.6 09:08

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)