2017-04-09 78 views
0

我有包括PYTHON困惑,爲什麼for循環追加值到字典中不工作

一個文本文件,「儘量不要成爲一個成功的人,而是努力成爲一個有價值的人。 智力的真正標誌不是知識,而是想象力 我們不能用我們創造它們時所用的相同思想來解決我們的問題 態度的弱點變成了性格的弱點 你不能責怪重力墜入愛河 愚蠢和天才之間的區別在於天才有其限制。「

我試圖把單詞作爲關鍵字放到字典中,併爲這些值設置行號。

這裏是我的代碼,我不知道爲什麼它不工作

dictionary = dict() 
    i = 0 
    for line in fp: 
     for word in line.lower().split(): 
      if word in dictionary: 
       dictionary[word].append(i) 
      else: 
       dictionary[word] = i 
     i = i + 1 
+1

「不起作用」是什麼意思? – rodrigo

+2

將'dictionary [word]'設置爲'i'是一個整數,那麼當下一次遇到該單詞時,你期望'dictionary [word] .append()'做什麼? –

+0

錯誤是「'int'對象沒有屬性'追加'」 – BestFromAbove

回答

1

第一次插入單詞作爲鍵時,它的值必須是一個列表,而不是一個整數,以便下次找到可以附加到列表中的同一個單詞時。但是你不能追加到int。

所以這裏的固定代碼:

dictionary = dict() 
i = 0 
for line in fp: 
    for word in line.lower().split(): 
     if word in dictionary: 
      dictionary[word].append(i) 
     else: 
      dictionary[word] = [i] 
    i = i + 1 

一個更清潔的方式來做到這一點是使用默認字典使用默認值是一個列表。

from collections import defaultdict 
dictionary = defaultdict(list) 
for i,line in enumerate(fp): 
    for word in line.lower().split(): 
      dictionary[word].append(i) 
+0

這很有道理。謝謝! – BestFromAbove

1

這是修正:

else: 
    dictionary[word] = [i] 
+0

請解釋一下。 OP顯然不能很好地理解列表。 –

+0

謝謝你的工作 – BestFromAbove

0

我覺得這裏的普遍問題是,辭典鍵必須是獨一無二的......你在句子中有多少單詞重複至少2次?重複的話

列表: (嘗試,不以,成爲,一,男人的,但和你的是,我們無力,天才)

然後也像「不能」將被分割爲‘可以’和‘t’(你要處理T作爲不呢?)

例子你問了: 具有2X鍵:值對'try': 1