2016-11-30 16 views
5

Nowy programator tutaj. W tej chwili mam słownik dla mojego programu zawierający wszystkie lata i ile słów ogółem były używane w literaturze na każdy rok.Którą strukturę danych powinienem tu użyć?

To, co muszę teraz zrobić, to znaleźć również częstotliwość względną dla danego roku, szukając określonego słowa podanego przez użytkownika. Częstotliwość względna jest określana przez użycie ilości razy, kiedy użyto określonego słowa i podzielenie go przez całkowitą ilość słów użytych w danym roku.

Czy muszę przygotować kolejny słownik zawierający rok i liczbę razy, kiedy słowo zostało użyte w tym roku? Lub całkowicie inną strukturę danych? Powinienem również wspomnieć, że użytkownik podaje datę rozpoczęcia i datę zakończenia.

Poniżej znajduje się moja funkcja dla aktualnie posiadanego słownika. Jeśli masz jakieś sugestie, jak zrobić to lepiej, to ja też mam uszy!

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

Gdzie jest źródło informacji o tym, ile razy użyto poszczególnych słów? – TigerhawkT3

+0

Dobrze, że myślisz o strukturach danych jako nowy programista. Najlepsza odpowiedź zależy od innych czynników, o których nie wspomniałeś: czy dane są dynamiczne czy statyczne? Jak duże jest to i jak ważna jest wydajność? – wim

+0

@ TigerhawkT3 jest w innym dostarczonym mi pliku, którego jeszcze nie usunąłem. – Blakester

Odpowiedz

0

Zakładam, że nie mają wiele lat (może być nawet kilkaset), więc byłoby oczekiwać, listy i słownik mieć podobny czas odnośnika. Jednak słowniki są semantycznie wygodniejsze.

W tym samym czasie, w ciągu każdego roku prawdopodobnie masz dużo słów, więc lepiej jest użyć struktury ze stałym (O (1)) sprawdzeniem, więc musisz to zrobić.

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][''] 
Powiązane problemy