对于我的作业,我需要在文本中隔离最常见的50个单词。我已经尝试了很多东西,在我最近的尝试中,我使用了这一点做了一致:
concordance = {}
lineno = 0
for line in vocab:
lineno = lineno + 1
words = re.findall(r'[A-Za-z][A-Za-z\'\-]*', line)
for word in words:
word = word.title()
if word in concordance:
concordance[word].append(lineno)
else:
concordance[word] = [lineno]
listing = []
for key in sorted(concordance.keys()):
listing.append( [key, concordance[key] ])
我想知道的是,我是否可以按照最常用单词的顺序对最常用词进行排序,然后隔离并打印前50个?我不允许导入re
和sys
以外的任何模块,我很难找到解决方案。
答案 0 :(得分:1)
sorted
是内置版,不需要导入。尝试类似:
list(sorted(concordance.items(), key = lambda (k,v): v))[:50]
未经测试,但您明白了。
list
构造函数在那里,因为sorted
返回一个生成器,你无法直接切片(itertools
提供了一个实用程序来执行此操作,但是你无法导入它)
可能会有更有效的方法来获得前50个,但我怀疑这里有什么问题。
答案 1 :(得分:0)
几点提示:
enumerate(list)
一次获取行号和行。\w
在正则表达式中使用单词字符,而不是列出[A-Za-z...]
。dict.items()
方法。它将返回(key, value)
对的列表。list.sort(key=function_to_compare_two_items)
操作该列表。lambda
定义该功能,但这不是必需的。len(list)
函数获取列表的长度。您可以使用它来获取单词的匹配数(存储在列表中)。list[:50]
获取前50个项目(相当于list[0:50]
),list[5:10]
获取从索引5包含到索引10的项目。print '[separator]'.join(list)
类似的内容来打印字符串,其中所有项目都以“[separator]”分隔。