【问题标题】:Defining file_counts [duplicate]定义 file_counts [重复]
【发布时间】:2016-11-07 23:31:49
【问题描述】:

重新实现 counts 函数,从 a 中获取数字列表 文件。在文件中,每一行都将包含一个整数,什么都没有 别的。最后一个字符将是换行符。

filename :: 表示当前目录中文件名的字符串。

返回值:以 int 为键,以 # 次为值的字典。

file_counts("file1.txt")   →  {100:3, 3:1, 9:2}

file_counts("file2.txt")   →  {1:1, 2:1, 3:1, 4:1, 5:1}

测试用例:

检查当 file1.txt 包含 "1\n1\n1\n2\n3\n3\n3\n3\n5\n" 时,file_counts("file1.txt") == {1:3,2:1,3:4,5:1}

检查当 file1.txt 包含 "100\n100\n3\n100\n9\n9\n" 时,file_counts("file1.txt") == {100:3, 3:1, 9:2}

基本上,文件的字符将按它们出现的次数打印在新行上。所以对于 100:3,100 将被打印 3 次。

*背景信息:

def counts(xs):
    d = {}
    for item in xs:
         d[item] = xs.count(item)
    return d 

这个函数对字典中的字符进行计数,并返回每个字符的计数*

我不知道如何实现这个功能。我一直在尝试多种方法,这是我得到的最接近答案的方法。我不确定丢失的部分是什么,希望能提供任何帮助。

我的代码:

def file_counts(filename):
    dict = {}
    with open(filename) as file_counts:
         for line in file_counts:

我不知道下一步该做什么。我尝试编辑计数功能,但没有成功。

我是这个网站的新手,所以我对格式不肯定,所以请随时编辑格式问题,如果需要更多信息,请询问

【问题讨论】:

  • 我建议不要使用dict 作为变量名——它会隐藏dict 类型。同样,与您的函数同名的变量(例如file_counts)可能会导致您出现问题。您可以使用counts() 实现file_counts(),将文件转换为ints 的列表并将结果列表传递给counts()。顺便说一句,标准 collections 模块中有一个 Counter 类可以为您执行此操作。
  • @AChampion 所以 file_count 只是计算文件中的字典?

标签: python python-3.x dictionary


【解决方案1】:

您可以使用read 方法将整个文档作为字符串读取。然后,您将有一个字符串值,每个值之间都有\n 字符。您可以使用split() 方法将字符串缩减为值列表。最后,您可以使用collections.Counter 模块来统计每个值的实例数。

import collections as c
def file_counts(filename):
    with open(filename, 'r') as f: # use flag 'r' to just read the doc
         data = f.read()      # read in the data file as a single string
    data = data.strip()       # get rid of the last \n on the end
    data = data.split('\n')   # break up the string into a list of values 
    counted_data = c.Counter(data)
    return dict(counted_data)

请注意,您应该避免使用dict 来命名您的字典。 dict 是 python 中的保留字,用于从映射到字典的对象生成字典(例如 - 元组列表)。

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 2011-08-29
    • 2011-06-27
    • 2019-08-05
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2012-02-07
    • 2014-12-21
    相关资源
    最近更新 更多