2013-11-14 1 views
0

Подсчитайте, сколько слов есть в TXT-файле.Python - Сколько слов в файле .txt по частоте и по алфавиту?

Затем напечатайте слова, упорядоченные по частоте и по алфавиту.

def count_words(): 
    d = dict() 
    word_file = open('words.txt') 
    for line in word_file: 
     word = line.strip(); 
     d = countwords(word,d) 
    return d 

Я не уверен, что я делаю это правильно. Надеюсь, кто-то может мне помочь.

Когда я запускаю программу, я получаю:

>>> 
>>> 

Это абзац речи.

+0

«По частоте и по алфавиту» - интересно, можно ли это сделать с помощью одного вызова сортировки. – MxyL

+1

это не имеет смысла. Вам нужно слово с большинством клавиш, напечатанных первым, или словами в алфавитном порядке? Если вы отсортируете их по их подсчетам, вы можете сортировать только по алфавиту для связей. Я думаю, что если вам нужно сортировать по алфавиту по связям, вам нужно будет вручную создать список из d dict после его создания вместо вызова моей инструкции печати ниже. – Tommy

ответ

2

Я хотел бы использовать словарь, как вы, но по-разному:

def count_words(): 
d = dict() 
word_file = open('words.txt') 
for line in word_file: 
    word = line.strip(); 
    if word not in d.keys(): 
     d[word] = 0 
    d[word]+=1 

Затем вы можете сортировать ключи от своих подсчетов и напечатать их:

from operator import itemgetter 
print(sorted(d.items(), key=itemgetter(1))) 

Для сортировки аннотации я использовал: Sort a Python dictionary by value

Кроме того, ваша программа не имеет каких-либо заявлений о печати, просто обратная линия, поэтому вы ничего не получаете.

+0

вы, вероятно, хотите удалить пунктуацию, а затем разделите каждую строку на слова в соответствии с пробелами. этот ответ предполагает, что каждое слово находится на собственной линии. – adityajones

+0

Ну, я просто скопировал код OPs, который также принимает каждое слово в своей строке. – Tommy

+0

никаких претензий. просто комментарий для OP, чтобы обдумать, использует ли он ваше решение (что действительно работает). – adityajones

1
#!/usr/local/cpython-3.3/bin/python 

import pprint 
import collections 

def words(filename): 
    with open(filename, 'r') as file_: 
     for line in file_: 
      for word in line.split(): 
       yield word.lower() 

counter = collections.Counter(words('/etc/services')) 

sorted_by_frequency = sorted((value, key) for key, value in counter.items()) 
sorted_by_frequency.reverse() 
print('Sorted by frequency') 
pprint.pprint(sorted_by_frequency) 
print('') 

sorted_alphabetically = sorted((key, value) for key, value in counter.items()) 
print('Sorted alphabetically') 
pprint.pprint(sorted_alphabetically) 
Смежные вопросы