我应该在这里使用哪种数据结构?

时间:2016-11-30 22:09:19

标签: python

新程序员在这里。目前,我有一本包含所有年份的字典,以及每年在文献中使用的总字数。

我现在需要做的是通过查找用户给出的特定单词来查找所述年份的相对频率。通过获取特定单词的使用次数并将其除以该年使用的单词总数来找到相对频率。

我是否需要制作另一个字典,其中包含该年度和该年度使用该字词的次数?还是完全不同的数据结构?我还应该提到用户提供开始和结束日期。

以下是我目前拥有的词典的功能。如果你对如何做得更好有任何建议,我全都听见了!

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()

1 个答案:

答案 0 :(得分:0)

我认为你不会有很多年(可能会有几百个),所以我希望列表和字典有相似的查找时间。但是,字典在语义上更方便。

同时,在每年内你可能会有很多单词,所以最好使用具有常量(O(1))查找的结构,所以dict就是。

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]['']