问题描述
编写一个函数 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}
除此之外,我知道如何计算单词出现的频率。 但是如何计算上面每一行的频率呢?
以下是一些限制条件:
- 您可以假设给定的文件存在,但它可能是空的(即不包含任何行)。
- 键必须按照它们在输入文件中出现的顺序插入到字典中。
- 在一些测试中,我们按插入顺序显示键; 在其他人中,按字母顺序对键进行排序。
- 应从对象名称中去除前导和尾随空格
- 应忽略空对象名称(例如空行或只有空格的行)。
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})
2楼
除了@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 '。 有什么建议吗?