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

时间:2018-09-24 07:19:37

标签: python python-3.x

编写一个函数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}

除其他事项外,我知道如何计算单词的出现频率。但是,如何如上所述计算每条线路的频率呢?

以下是一些限制条件:

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

2 个答案:

答案 0 :(得分: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})

答案 1 :(得分:0)

根据@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 '。有什么建议吗?