在dict理解中转换为float会在其他地方产生语法错误?

时间:2015-06-21 17:06:27

标签: python dictionary-comprehension

这很奇怪。我正在尝试实现文本频率计算,并在ipython笔记本中使用python 2.7运行以下代码。三个版本的功能。

第一个版本,只计算字符串列表中的单词实例并将其粘贴在字典中:

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}

“啊!”我认为。这是世界上最容易修复的错误。我正在进行整数除法。我不想做整数除法。只需将其中一个术语转换为浮动。的Bam

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转换为浮点数。这是世界上最简单的操作......它是如何打破词典理解的呢?

我完全被这一个难过......任何人都有任何好主意?

1 个答案:

答案 0 :(得分:0)

根据this元讨论,我代表Tim Peters回答了这个问题,并将其标记为社区维基。

  

你的括号不平衡。添加java.io.FileNotFoundException: en-sent.bin (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at OpenNlpTest.SentenceDetect(OpenNlpTest.java:17) at OpenNlpTest.main(OpenNlpTest.java:31) 后,您忘记添加float(