所以我有以下代码:
def stripNonAlphaNum(text):
import re
return re.compile(r'\W+', re.UNICODE).split(text)
def readText(fileStub):
words = open(fileStub, 'r').read()
words = words.lower() # Make it lowercase
wordlist = sorted(stripNonAlphaNum(words))
wordfreq = []
for w in wordlist: # Increase count of one upon every iteration of the word.
wordfreq.append(wordlist.count(w))
return list(zip(wordlist, wordfreq))
它读取一个文件,然后生成它们出现的单词和频率对。我面临的问题是,当我打印结果时,我没有得到正确的配对数。
如果我有一些输入,我可能得到这样的输出:
('和',27),('和',27),('和',27),('和',27),('和',27),('和',27) ,('和',27),..(27次)
这不是我想要的。
相反,我希望它能给出1个输出的单词,只有一个数字,如下所示:
('和',27),('能',5),('蝙蝠',6)..等等
那么我该如何解决这个问题呢?
答案 0 :(得分:1)
你应该考虑使用字典。 字典像哈希映射一样工作,因此允许关联索引;以这种方式重复不是问题。
...
wordfreq = {}
for w in wordlist:
wordfreq[w] = wordlist.count(w)
return wordfreq
如果您确实需要返回列表,请执行return wordfreq.items()
这种方法的唯一问题是你将不必要地为每个单词多次计算wordlist.count()方法。
要避免此问题,请写下for w in set(wordlist):
编辑其他问题:如果您可以返回列表,只需执行return sorted(wordfreq.items(), key=lambda t: t[1])
。如果省略关键部分,结果将按单词first排序,然后按值