0

次のコードを実行して、テキストファイルで単語が出現した回数をカウントしています。

def print_words(filename):
    f = open(filename, 'rU')
    dict={}
    for line in f:
       words=line.split()
       for word in words:
          if dict.get(word):
              dict[word]=dict[word]+1
          else: 
              dict[word]=1
    ke = sorted(dict.keys())
    for k, v in ke: print k, v

辞書ファイルには、各単語とその数が含まれている必要があります。私はそれをうまく機能させることができました。しかし、私はソートに失敗しました

4

5 に答える 5

2

他の答えは問題を指摘しています。Python 2.7以降を使用している場合は、モジュールのCounterクラスを使用して、これを行う簡単な方法があります。collections

from collections import Counter

def print_words(filename):
    with open(filename, 'rU') as f:
        counts = Counter(f.read().split())
    for k, v in sorted(counts.items()):
        print k, v
于 2012-10-23T20:48:29.187 に答える
1

それ以外の

ke = sorted(dict.keys())
for k, v in ke: print k, v

試す:

for k in sorted(dict.keys()):
    print k, dict[k]

sorted(dict.keys())キーのみのソートされたリストを返します(それがあなたがそれを与えるすべてであるため)。

于 2012-10-23T20:36:39.547 に答える
1

sorted(dict.keys())キーだけのソートされたリストを返します。forループは、同じリスト内の値を見つけることを誤って期待しています。代わりに、以下のコードを試してください。

for k in ke:
    print k, dict[k]
于 2012-10-23T20:36:42.540 に答える
1

2.5および2.6互換のソリューションの場合は、次を使用しますdefaultdict

from collections import defaultdict
counter = defaultdict(int)

for word in f.read().split():
    counter[word] += 1

これにより、辞書(実際にはサブクラスですが、同じように使用されます)が返され、検索するだけで済みますcounter['someword'](整数を返します)。

仕組み:要求されたキーが存在しない場合は、指定された関数の戻り値を使用して作成されます。この場合、、int()0です。上記のリンク先のドキュメントの例のセクションも参照してください。

于 2012-10-23T21:42:49.770 に答える
0

より重要なもの(順序またはカウント)に応じて、コレクションモジュールの順序付きディクショナリまたはカウンターディクショナリのいずれかを使用できます

OrderedDictは、要素が追加された順序で要素を記憶します。カウンター-要素をカウントします

前者の場合、あなたはそのようなことをするかもしれません

>>> words = open(filename).read().split()
>>> counters = OrderedDict([(word, words.count(word)) 
                            for word in sorted(list(set(words)))])

カウンター付きのソートされた辞書が2行で表示されます。

于 2012-10-23T21:07:14.817 に答える