当前位置: 代码迷 >> python >> 如何编写测量每行(对象)频率的函数 - Python
  详细解决方案

如何编写测量每行(对象)频率的函数 - Python

热度:53   发布时间:2023-06-27 21:30:38.0

编写一个函数 create_dictionary(filename) ,它读取命名文件并返回从对象名称到出现次数(特定对象被猜测的次数)的字典映射。 例如,给定一个包含以下内容的文件mydata.txt

abacus
calculator
modern computer
abacus
modern computer
large white thing
modern computer

所以,当我输入这个时:

dictionary = create_dictionary('mydata.txt')
for key in dictionary:
print(key + ': ' + str(dictionary[key]))

该函数必须返回以下字典格式:

{'abacus': 2, 'calculator': 1, 'modern computer': 3, 'large white thing': 1}

除此之外,我知道如何计算单词出现的频率。 但是如何计算上面每一行的频率呢?

以下是一些限制条件:

  • 您可以假设给定的文件存在,但它可能是空的(即不包含任何行)。
  • 键必须按照它们在输入文件中出现的顺序插入到字典中。
  • 在一些测试中,我们按插入顺序显示键; 在其他人中,按字母顺序对键进行排序。
  • 应从对象名称中去除前导和尾随空格
  • 应忽略空对象名称(例如空行或只有空格的行)。

实现的一种更简单的方法是使用以下

让文件名a.txt

from collections import Counter
s = open('a.txt','r').read().strip()
print(Counter(s.split('\n')))

输出如下:

Counter({'abacus': 2,
         'calculator': 1,
         'large white thing': 1,
         'modern computer': 3})

除了@bigbounty 的建议之外,这里还有我能想到的。

from collections import Counter
def create_dictionary(filename):
    """Blah"""
    keys = Counter()
    s = open(filename,'r').read().strip()
    keys = (Counter(s.split('\n')))
    return keys

所以,如果我输入:

dictionary = create_dictionary('mydata.txt')
for key in dictionary:
   print(key + ': ' + str(dictionary[key]))

我得到:

abacus: 2
calculator: 1
modern computer: 3
large white thing: 1

但是我需要一些帮助来解决“如果文本文件为空,如何不打印任何内容?”

例如:考虑一个空文本文件 ('nothing.txt')。 预期输出为空白。 但我不知道如何省略键的默认值 ' : 1 '。 有什么建议吗?