2012-05-12 10 views
2

Я уже рассмотрел другие подобные вопросы, но не смог применить ответы на свою программу. В настоящий момент частоты печатаются в порядке возрастания, что я могу изменить, чтобы напечатать его в порядке убывания?Как печатать частоты в порядке убывания?

from sys import argv 
frequencies = {} 
for ch in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ': 
    frequencies[ch] = 0 

for filename in argv[1:]: 
    try: 
     f = open(filename) 
    except IOError: 
     print 'skipping unopenable', filename 
     continue 

text = f.read()     
f.close()      

for ch in text:     
    if ch.isalpha(): 
     ch = ch.upper() 
     frequencies[ch] = frequencies[ch] + 1 

for ch in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ': 
    print ch, frequencies[ch] 

Заранее спасибо.

+0

Вы имеете в виду по убыванию алфавитном порядке? или нисходящего частотного порядка. Похоже, вы должны понимать алфавит. – sblom

+0

Я имею в виду спуск по частоте. Извините – user1390700

ответ

0

По убыванию от Z до A? Измените константу строки на второй последней строке на «ZYXWV ... A».

+0

Извините, я имею в виду частотный заказ. – user1390700

2

Вы можете позвонить items на номер dict, чтобы получить список кортежей элементов в словаре. Затем вы можете (реверс) sort вторым элементом в кортеже (значение в dict, частота):

sorted(frequencies.items(), key=lambda x: -x[1]) 

Кстати, а не с помощью 'ABCD..., вы можете использовать string.ascii_uppercase.

+0

Спасибо, но немного смущен. Где я могу добавить элемент и dict? – user1390700

+0

@ user1390700: 'frequency' - это' dict'. 'items' - это метод на' dict's. В основном, вместо вывода с помощью 'for ch in 'ABC ...':' 'print ch, frequency [ch]', вы можете использовать 'для ch, freq в отсортированном (...):' 'print ch, freq ' – icktoofay

+0

Отлично. Это сработало. Спасибо. – user1390700

4

Вам не нужно изобретать велосипед. Используйте стандартные функции библиотеки:

from sys import argv 
from collections import Counter 

frequencies = Counter() 

for filename in argv[1:]: 
    with open(filename) as f: 
     text = f.read() 
    frequencies.update(ch.upper() for ch in text if ch.isalpha()) 

for ch, freq in frequencies.most_common(): 
    print ch, freq 
+0

Отлично. Я тоже дам это. спасибо – user1390700

0
from sys import argv 
tre="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 

for filename in argv[1:]: 
    with open(filename) as f: 
     text = f.read() 
     ttt=list(set(zip(tre,map(text.count,tre)))) 
     ttt1=sorted([[x[1],x[0]] for x in ttt]) 
     ttt1.reverse() 
     ttt3=[[x[1],x[0]] for x in ttt1] 
     for x in ttt3: 
      print x[0],x[1]