次のコードは、Wordをtxtファイルに出力し、そのWordのインスタンスがいくつあるか(例:a、26)問題は、アルファベット順に出力されないことです。どんな助けでも大歓迎です
import re
def print_Word_counts(filename):
s=open(filename).read()
words=re.findall('[a-zA-Z]+', s)
e=[x.lower() for x in (words)]
e.sort()
from collections import Counter
dic=Counter(e)
for key,value in dic.items():
print (key,value)
print_Word_counts('engltreaty.txt')
アイテムを並べ替えるだけです。組み込みのsorted
は見事に機能するはずです。
_for key,value in sorted(dic.items()):
...
_
e.sort()
行をドロップすると、これはほぼ同じ時間で実行されます。これが機能しない理由は、ディクショナリがハッシュ値の順序でアイテムを格納するhash
テーブルに基づいているためです(ハッシュの衝突が発生した場合は、より複雑な要素が含まれます)。ハッシュ関数はどこにも指定されていないため、辞書を使用して順序を維持することはできず、順序は実装とバージョンに依存します。他の単純なケースでは、collections
モジュールには挿入順序を維持するOrderedDict
サブクラスがあります。ただし、これは実際には役立ちません。
注Counter
はdict
のサブクラスなので、Counter
に追加する前にソートします。
e.sort()
dic=Counter(e)
順序を達成しません。
import re
from collections import Counter
def print_Word_counts(filename):
c = Counter()
with open(filename) as f: # with block closes file at the end of the block
for line in f: # go line by line, don't load it all into mem at once
c.update(w.lower() for w in re.findall('[a-zA-Z]+', line))
for k, v in sorted(c.items()): # sorts
print k, v
print_Word_counts('engltreaty.txt')