以下代码打印出txt文件中的单词,然后打印出该单词的实例数(例如a,26),问题是它不按字母顺序打印出来。任何帮助将不胜感激
import re
def print_word_counts(filename):
s=open(filename).read()
words=re.findall('[a-zA-Z]+', s)
e=[x.lower() for x in (words)]
e.sort()
from collections import Counter
dic=Counter(e)
for key,value in dic.items():
print (key,value)
print_word_counts('engltreaty.txt')
答案 0 :(得分:34)
您只需要对项目进行排序。内置sorted
应该非常有效:
for key,value in sorted(dic.items()):
...
如果删除e.sort()
行,那么这应该在大约相同的时间内运行。它不起作用的原因是因为字典基于hash
表,它们按照散列值的顺序存储项目(当发生散列冲突时会有一些更复杂的东西)。由于哈希函数从未在任何地方指定过,这意味着您不能指望字典保留您尝试提供的任何顺序,并且顺序是实现和版本相关的。对于其他简单情况,collections
模块有一个OrderedDict
子类,它确实保持插入顺序。但是,这不会对你有所帮助。
答案 1 :(得分:0)
注意Counter
是dict
的子类,因此在添加到Counter
之前进行排序:
e.sort()
dic=Counter(e)
无法实现订单。
import re
from collections import Counter
def print_word_counts(filename):
c = Counter()
with open(filename) as f: # with block closes file at the end of the block
for line in f: # go line by line, don't load it all into mem at once
c.update(w.lower() for w in re.findall('[a-zA-Z]+', line))
for k, v in sorted(c.items()): # sorts
print k, v
print_word_counts('engltreaty.txt')