如何在Python字典中忽略返回键值

如何在Python字典中忽略返回键值,python,python-3.x,Python,Python 3.x,我需要编写一个函数create_dictionary(filename),它读取命名文件并返回从对象名称到出现计数(猜测特定对象的次数)的字典映射。例如,给定一个包含以下内容的文件mydata.txt: abacus calculator modern computer abacus modern computer large white thing modern computer 这是我的程序,它可以很好地处理非空文本文件 from collections import Counter de

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

abacus
calculator
modern computer
abacus
modern computer
large white thing
modern computer
这是我的程序,它可以很好地处理非空文本文件

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

dictionary = create_dictionary('mydata.txt')
for key in dictionary:
print(key + ': ' + str(dictionary[key]))
return keys
具体内容如下:

{'abacus': 2, 'calculator': 1, 'modern computer': 3, 'large white thing': 1}
当我有一个空文件(例如blank.txt)时,该函数必须忽略所有空行。因此,print语句必须返回空白。但不管我怎么努力,我都会得到“:1”。哦,这里有一些简单的限制: 以下是一些限制条件:

  • 您可以假设给定的文件存在,但它可能是空的(即不包含任何行)
  • 键必须按照它们在输入文件中出现的顺序插入字典
  • 应该从对象名称中去掉前导和尾随空格
  • 应忽略空对象名称(例如,空行或只有空格的行)

有什么建议吗?

先修复压痕先修复压痕Hanks John。我一直怀疑读线是一个不可分割的组成部分。现在可以了。我理解这种机制。@Pamela readlines在这里应该没有影响。你可以很容易地忽略它。唯一的区别是
readlines
强制立即读取文件。如果不使用它,python将以惰性方式读取文件。如果文件很大,这可能会产生影响,对于小文件来说,这并不重要。谢谢John。我一直怀疑读线是一个不可分割的组成部分。现在可以了。我理解这种机制。@Pamela readlines在这里应该没有影响。你可以很容易地忽略它。唯一的区别是
readlines
强制立即读取文件。如果不使用它,python将以惰性方式读取文件。如果文件很大,这可能会产生影响,而对于小文件来说,这并不重要。
lines = open(filename,'r').readlines()
keys = Counter([line.strip() for line in lines if line.strip()])