8

Pythonとプログラミングは初めてで、そのことを頭に入れるのは簡単ではありません。私が読み始めた本は完全に退屈なので、いくつかのアイデアをいじり始めます。

これが私がやりたいことです: テキストファイルを開き、すべての値 (システム名のリストのみ) の頻度を数え、リストを頻度でソートし、結果を返します。それを行うためのコードをウェブで検索した後、私はこれを得ました:

file = open('C:\\Temp\\Test2.txt', 'r')
text = file.read()
file.close()


word_list = text.lower().split(None)

word_freq = {}

for word in word_list:

    word_freq[word] = word_freq.get(word, 0) + 1
list = sorted(word_freq.keys())
for word in list:
    print ("%-10s %d" % (word, word_freq[word]))

動作しますが、リスト内の単語/システム名でソートされます。

pc05010    3
pc05012    1
pc05013    8
pc05014    2

私はそれが欲しい:

pc05013    8
pc05010    3
pc05014    2
pc05012    1

現在、値による並べ替え関数を何時間も検索しています。とても簡単だと思いますが、何も見つかりませんでした。

私の初心者の観点では、次の行と関係があります。

list = sorted(word_freq.keys())

私は多分それだと思った:

list = sorted(word_freq.values())

しかし、いいえ....この言語に関する膨大な情報をすべて見るのは非常にイライラしますが、そのような単純なことを機能させることができませんでした。

助けてください :)

どうもありがとう!

4

3 に答える 3

4

collections.Counterを使用して物事を数え、withステートメントを使用してファイルを開く (および閉じる) のに役立ちます。

import collections

with open('C:\\Temp\\Test2.txt', 'r') as f:
    text = f.read()

word_freq = collections.Counter(text.lower().split())
for word, freq in word_freq.most_common():
    print ("%-10s %d" % (word, freq))
于 2013-05-25T12:41:42.030 に答える
4

ここで使用する必要がword_freq.items()あります:

lis = sorted(word_freq.items(), key = lambda x:x[1], reverse = True)
for word,freq in lis:
    print ("%-10s %d" % (word, freq))

list変数名として使用しないでください。

于 2013-05-25T12:39:41.567 に答える
4

collections.Counter を見てください。

>>> wordlist = ['foo', 'bar', 'foo', 'baz']
>>> import collections
>>> counter = collections.Counter(wordlist)
>>> counter.most_common()
[('foo', 2), ('baz', 1), ('bar', 1)]
于 2013-05-25T12:40:08.090 に答える