将字典的输出返回到字母顺序

时间:2013-05-17 01:44:05

标签: python dictionary alphabetical

以下代码打印出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')

2 个答案:

答案 0 :(得分:34)

您只需要对项目进行排序。内置sorted应该非常有效:

for key,value in sorted(dic.items()):
    ...

如果删除e.sort()行,那么这应该在大约相同的时间内运行。它不起作用的原因是因为字典基于hash表,它们按照散列值的顺序存储项目(当发生散列冲突时会有一些更复杂的东西)。由于哈希函数从未在任何地方指定过,这意味着您不能指望字典保留您尝试提供的任何顺序,并且顺序是实现和版本相关的。对于其他简单情况,collections模块有一个OrderedDict子类,它确实保持插入顺序。但是,这不会对你有所帮助。

答案 1 :(得分:0)

注意Counterdict的子类,因此在添加到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')