だから私はGooglePythonコードクラスに取り組んでいて、Word_Count.pyの練習をしようとしています。目的は、単語数(値)でソートされた単語(キー)の辞書を作成し、それらを印刷用のタプルとして返すことです。
辞書を作成するためのヘルパー関数を作成しました。
def dict_creator(filename): #helper function to create a dictionary each 'word' is a key and the 'wordcount' is the value
input_file = open(filename, 'r') #open file as read
for line in input_file: #for each line of text in the input file
words = line.split() #split each line into individual words
for word in words: #for each word in the words list(?)
word = word.lower() #make each word lower case.
if word not in word_count: #if the word hasn't been seen before
word_count[word] = 1 #create a dictionary key with the 'word' and assign a value of 1
else: word_count[word] += 1 #if 'word' seen before, increase value by 1
return word_count #return word_count dictionary
word_count.close()
現在、この投稿で概説されている.itemgetterメソッドを使用して、値(最大から最小)でソートされた辞書を作成中です:link。これが私のコードです:
def print_words(filename):
word_count = dict_creator(filename) #run dict_creator on input file (creating dictionary)
print sorted(word_count.iteritems(), key=operator.itemgetter(1), reverse=True)
#print dictionary in total sorted descending by value. Values have been doubled compared to original dictionary?
for word in sorted(word_count.iteritems(), key=operator.itemgetter(1), reverse=True):
#create sorted list of tuples using operator module functions sorted in an inverse manner
a = word
b = word_count[word]
print a, b #print key and value
ただし、テストファイルと小さいファイルでコードを実行すると、キーエラーがスローされます(以下を参照)。
Traceback (most recent call last):
File "F:\Misc\google-python-exercises\basic\wordcount_edited.py", line 74, in <module>
print_words(lorem_ipsum) #run input file through print_words
File "F:\Misc\google-python-exercises\basic\wordcount_edited.py", line 70, in print_words
b = word_count[word]
KeyError: ('in', 3)
元の辞書とソートされた辞書を印刷しましたが、辞書がソートされると、すべての値が2倍になっているようです。この種の問題に関連するいくつかのスレッドを調べて、.itemgetterのドキュメントを確認しましたが、同様の問題を抱えている他の人を見つけることができないようです。
誰かが私のコードがword_count関数で辞書を2回繰り返す原因で、値が増加する原因を指摘できますか?
ありがとう!
SB