python - 我正在尝试计算 txt 文件中的所有字母,然后按降序显示

标签 python python-3.x dictionary display

正如标题所说:

到目前为止,这是我的代码确实有效的地方,但是我无法按顺序显示信息。目前它只是随机显示信息。

def frequencies(filename):
    infile=open(filename, 'r')
    wordcount={}
    content = infile.read()
    infile.close()
    counter = {}
    invalid = "‘'`,.?!:;-_\n—' '"

    for word in content:
        word = content.lower()
        for letter in word:
            if letter not in invalid:
                if letter not in counter:
                    counter[letter] = content.count(letter)
                    print('{:8} appears {} times.'.format(letter, counter[letter]))

如有任何帮助,我们将不胜感激。

最佳答案

字典是无序的数据结构。此外,如果你想计算一组数据中的某些项目,你最好使用 collections.Counter()为了这个目标,它更加优化和 pythonic。

然后您可以只使用 Counter.most_common(N) 来打印您的 Counter 对象中的大多数 N 项。

关于文件的打开,您可以简单地使用 with 语句在 block 的末尾自动关闭文件。最好不要在你的函数中打印最终结果,你可以通过生成预期的行然后在你需要的时候打印它们来使你的函数成为一个生成器。

from collections import Counter

def frequencies(filename, top_n):
    with open(filename) as infile:
        content = infile.read()
    invalid = "‘'`,.?!:;-_\n—' '"
    counter = Counter(filter(lambda x: not invalid.__contains__(x), content))
    for letter, count in counter.most_common(top_n):
        yield '{:8} appears {} times.'.format(letter, count)

然后使用 for 循环遍历生成器函数:

for line in frequencies(filename, 100):
    print(line)

关于python - 我正在尝试计算 txt 文件中的所有字母,然后按降序显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530795/

相关文章:

swift - 如何使用字典为 TableView 分配单元格值?

python - 是否已经有 python 生成器可以做这些基本的事情?

python - 打开文本文件作为 textblob 的输入

python - 如何在 IntelliJ 中打开 .ipynb 文件?

python-3.x - 无服务器框架 : Invoke local python function is slow to respond

python - 从 Python 字典批量更新 PostgreSQL

python - 当我正常运行时,容器工作正常,但是当我使用task def通过ecs运行容器时,它的抛出错误

Python 子类实例无法访问父级启动的变量

python - 按元素有效地分组数组

C++ map 在到达 map 末尾时进行跟踪