2015-06-21 15 views
0

這很奇怪。我試圖實現文本頻率計算,並在ipython筆記本中使用python 2.7運行以下代碼。三個版本的功能。在dict理解中投射浮動會在別處創建語法錯誤?

第一個版本,只是計算單詞的實例中的字符串列表,並把它貼在一本字典:

testList = ['I', 'am', 'a', 'list', 'of', 'strings'] 

def tf1(listOfStrs): 
    thedict = dict((x,listOfStrs.count(x)) for x in set(listOfStrs)) 
    print thedict 

# produces expected output: 
> {'a': 1, 'I': 1, 'am': 1, 'list': 1, 'of': 1, 'strings': 1} 

好吧,這工作的罰款。通過將每個出現次數除以單詞總數得到頻率的時間。應產生0.16 ...等。

def tf2(listOfStrs): 
    print len(listOfStrs) 
    thedict = dict((x,listOfStrs.count(x)/len(listOfStrs)) for x in set(listOfStrs)) 
    print thedict 

tf2(testList) 
> 6 
> {'a': 0, 'I': 0, 'am': 0, 'list': 0, 'of': 0, 'strings': 0} 

「啊!」我認爲。這是世界上最容易修復的錯誤。我在做整數除法。我不想做整數除法。只需將其中一個條件浮動即可。巴姆。

def tf2(listOfStrs): 
    print len(listOfStrs) 
    thedict = dict((x,listOfStrs.count(x)/float(len(listOfStrs)) for x in set(listOfStrs)) 
    print thedict 

> File "<ipython-input-13-db67e35f2596>", line 3 
>  thedict = dict((x,listOfStrs.count(x)/float(len(listOfStrs)) for x in set(listOfStrs)) 
>                 ^
> SyntaxError: invalid syntax 

????我知道for語句中沒有語法錯誤,因爲它在前兩個版本中的血腥效果很好。嗯。所以很明顯,投射到浮動打破了字典的理解。但那似乎很瘋狂。它只是將一個int投射到一個浮點數上。這是世界上最簡單的操作......它是如何打破詞典理解?

我完全被這個難住...任何人有任何明智的想法?

+0

您錯過了一個準... – nneonneo

+3

您的圓括號不平衡。當你添加'float(',你忘了添加一個')'。 –

+1

Aaaaahhhhhhhhhh它總是有點愚蠢的事情。我認真地花了半個小時查閱了理解文檔... –

回答

0

根據this meta討論我將以Tim Peters的名義回答這個問題,並將其標記爲社區維基。

括號不平衡。當你添加float(時,你忘了添加一個)