파이썬 초보입니다. 도와주세요!! ( 문자열 > 리스트 > 딕셔너리 > 문자열 순으로 변환하기)
조회수 3092회
문자열(텍스트 파일)에 특정 단어가 몇 번 나오는 지 알아보고, 빈도 수에 따라 항목을 내림차순으로 정리하는 프로그램을 만들기 위해 다음과 같이 코드를 작성하였습니다. 예컨대 fairy_tale.txt 라는 텍스트 파일에
A long time ago, \n there lived a beautiful princes.
라는 문장이 들어있는데 이것을 리스트 형식으로 변환하고자 합니다.
제가 원하는 바는
첫째, 이 텍스트 파일을 ['A', 'long', 'time' 'ago' ',' 'there', 'lived', 'a', 'beautiful', 'princess'] 라는 리스트로 변환 시킨다.
둘째, 빈도 수를 세서 {'A':1, 'long':1, 'time':1 'ago':1 ',':1, 'there':1, 'lived':1, 'a':1, 'beautiful':1, 'princess':1} 의 딕셔너리로 정리한다.
셋째, 딕셔너리로 정리한 값을 순서쌍 형태의 리스트로 변환하여 정리한다.
인데 첫 번째 부분에서 어디가 잘못 작성된 것인지 모르겠습니다. 아래와 같이 코드를 실행하면 리스트가
[(1, 'A'), (1, 'long'), (1, 'time'), (1, 'ago,')] [(1, 'there'), (1, 'lived'), (1, 'a'), (1, 'beautiful'), (1, 'princes.')]
이런 식으로 생성되네요. 왜 한 개의 리스트 안에 모든 내용이 들어가지 않는것이죠? strip을 사용하여 공백도 제거하였는데... 아래에 등장하는 코드는 제가 작성한 코드입니다.
story = open('fairy_tale.txt')
for line in story:
line = line.strip()
words = line.split()
counts = dict()
for word in words:
counts[word] = counts.get(word,0) + 1
tmp = [(v , k) for (k),(v) in counts.items()]
print(tmp)
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
리스트가 두개로 나오는 이유는 story가 두줄이라서 for line in story 에 의해 두번 반복하게 됩니다.
두번반복이니 두번 리스트가 출력되는 겁니다.
질문자가 작성한 코드를 최대한 유지한채 수정합니다.
단어수를 세는 부분은 반복을 하지 않아야 하니 단어들만 추출하는 로직을 분리합니다.
story = open('fairy_tale.txt') words = (word for line in story for word in line.split()) # 토큰(단어) 추출 counts = dict() for word in words: counts[word] = counts.get(word,0) + 1 tmp = [(v , k) for (k),(v) in counts.items()] print(tmp)
댓글 입력