2016-11-30 18 views
5

ここに新しいプログラマー。現時点では、年のすべてを含む私のプログラムのための辞書と、どのくらいの合計単語が毎年文学で使用されたかがあります。ここで使用するデータ構造はどれですか?

私が今必要とするのは、ユーザーが指定した特定の単語を検索することによって、その年の相対頻度を見つけることです。相対頻度は、特定の単語が使用された時間を取り出し、その年に使用された単語の総数で除算することによって求められます。

その年に単語が使用された年と回数を含む別の辞書を作成する必要がありますか?あるいは全く別のデータ構造ですか?私はまた、ユーザーが開始日と終了日を提供することを言及する必要があります。

以下は私の現在の辞書の機能です。あなたがこれをより良くする方法についての提案があれば、私はすべての耳です!

yearTotal = dict() 
def addTotal(): 
    with open('total_counts.csv') as allWords: 
     readW = csv.reader(allWords, delimiter=',') 
     for row in readW: 
      yearTotal[row[0]] = row[1] 

addTotal() 
+0

特定の単語が何回使用されたかについての情報源はどこですか? – TigerhawkT3

+0

新しいプログラマーとしてのデータ構造について考えてみてください。最善の答えは、あなたが言及していない他の要因によって異なります:データは動的か静的ですか?どれくらいの大きさで、パフォーマンスはどれくらい重要ですか? – wim

+0

@ TigerhawkT3それは私に提供された別のファイルにあります。私はまだスライスしていません。 – Blakester

答えて

0

私はあなたが年の多くを持っていない(数百までであり得る)ので、私はリストと辞書は、同様の検索時間を持つことを期待すると仮定します。しかし、辞書は意味的により便利です。

同時に、毎年多くの単語があるので、定数(O(1))ルックアップを持つ構造を使用する方がよいと言います。

from collections import defaultdict 

yearTotal = defaultdict(labda: defaultdict(int)) 

fh = open('total_counts.csv') 
for year, word in csv.reader(fh, delimiter=","): 
    yearTotal[year][''] += 1 # here we'll cache the number of words 
    yearTotal[year][word] += 1 

# ... 
word = "foo" 
year = "1984" 
relative_frequency = float(yearTotal[year][word])/yearTotal[year][''] 
関連する問題