4

我正在编写一个程序来平均一些值。详细信息:我有一个文件夹,其中有许多.txt带有float数字的文件。
我所做的只是总结浮点值并将它们存储在Counter每个文件的 a 中。
之后,我想将所有值相加,Counter然后除以总数。文件(即.txt)。

但是直到存储在 aCounter中都很好,但是当我想Counter通过使用sum(Counter.values())将存在的值相加时,它会引发一个错误,表明'float' object has no attribute 'values'
我也已经阅读了手册,他们还说整数值是可能的。
但是是否有任何方法可以float在计数器中添加值。

4

3 回答 3

8

为什么要使用Counter对象对文件中的值求和?其声明的目的是“用于计算可散列对象”(即,如果您有多个要计算实例的离散对象)。

如果要存储每个文件中的总和浮点值,请尝试使用常规字典:

floatsums = {}
floatsums['file1.txt'] = ... // insert code to sum the floats

total = sum(floatsums.values())
numfiles = len(floatsums)
于 2012-06-05T15:36:46.123 回答
4

更简单:

from collections import defaultdict
sums = defaultdict(lambda: 0)

然后:

sums['a'] += 1.
于 2014-09-19T08:57:17.087 回答
3

尽管文档说了什么,但将浮点值放入Counter. 自己试试。

    from collections import Counter

    a = Counter()
    a['a'] += 1
    a['a'] += 0.1
    a['b'] += 0.1
    print(list(a.items()))

至少在 Python 3 中。这给

    [('a', 1.1), ('b', 0.1)]

这适用于 Python 2 和 3。当然,由于这不是文档所说的,它在技术上是未定义的行为,所以它可能在未来的版本中不起作用,但我对此表示怀疑。不过,如果您想完全符合规范,您可以这样做:

    from collections import defaultdict

    a = defaultdict(float)

这将为您提供与上述相同的结果,并且仅使用记录的功能。

于 2017-12-18T23:37:46.997 回答