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]

前もって感謝します。

4

4 に答える 4

5

車輪を再発明する必要はありません。標準ライブラリ機能を使用します。

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
于 2012-05-12T06:43:51.503 に答える
2

を呼び出しitemsdict、辞書内のアイテムのタプルのリストを取得できます。次に、タプルの2番目の項目(の値、頻度)で(逆に)並べ替えることができます。dict

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

ちなみに、を使用する代わりに、を使用'ABCD...することができますstring.ascii_uppercase

于 2012-05-12T06:30:07.253 に答える
0

ZからAに降順ですか?最後から2番目の行の文字列定数を「ZYXWV...A」に変更します。

于 2012-05-12T06:27:46.433 に答える
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]
于 2012-05-12T09:19:07.207 に答える