2012-05-12 21 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

您可以撥打itemsdict以獲取字典中項目的元組列表。通過在元組的第二項(在dict值,頻率),然後,您可以(反向)sort

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

順便說一句,而不是使用'ABCD...,您可以使用string.ascii_uppercase

+0

謝謝,但有點困惑。我在哪裏添加項目和字典? – user1390700

+0

@ user1390700:'頻率'是一個'dict'。 'items'是'dict's的一種方法。基本上,不是用'輸入ABC'輸出':'ch ch,frequency [ch]',你可以使用'for ch,freq in sort(...):''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]