【问题标题】:How to sum() the contents of multiple collections.Counter() objects with loop?如何使用循环对多个 collections.Counter() 对象的内容求和()?
【发布时间】:2016-05-20 03:07:54
【问题描述】:

我一直在研究这个问题, 用于解决 'combining' multiple Counter().object 或 dicts;但仍然无法完成。 我在下面找到了两个参考:

例如,我有很多“计数器类型”变量名,顺序为[1 to 100]

Name:counter_1 Value:Counter({'a':1, 'b':2, 'c':3})
Name:counter_2 Value:Counter({'b':5, 'c':19, f:17})
Name:counter_3 Value:Counter({'a':11, 'b':22, 'c':33, 'd':97})
...
Name:counter_100 Value:Counter({'c':55, 'd':22, 'e':63, 'f':21})

如果我手动添加每个counter_1 + counter_2 + ... + counter_3,那会让我发疯。

有没有更优雅或更简单的方法来sum()

谢谢一百万!

【问题讨论】:

    标签: python dictionary sum counter


    【解决方案1】:

    只需使用内置函数sum(),并给它一个适当的起始值,即空Counter

    >>> import collections
    >>> c1 = collections.Counter({'a':1, 'b':2, 'c':3})
    >>> c2 = collections.Counter({'b':5, 'c':19, 'f':17})
    >>> sum((c1, c2), collections.Counter())
    Counter({'c': 22, 'f': 17, 'b': 7, 'a': 1})
    

    【讨论】:

    • 如果我必须从 c1 求和到 c100 怎么办? tks
    • 您将它们全部放入list。你应该已经这样做了。你真的有单独的变量counter_1counter_100吗?
    • 是的。我尝试了类似(但类型错误)sum(local()['counter_'+ str(i) for i in (1,100)], Counter())。我也是python新手。
    • 您的第一步应该首先避免创建 100 个单独的命名变量,正如 TigerhawkT3 所说,使用列表(或字典,取决于您对数字的关心程度)。跨度>
    • 另一个问题:如何声明一个没有任何值的Counter Type 变量? (当我考虑避免制作 100 个单独的命名时)
    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2023-03-10
    • 2014-12-08
    • 2022-01-12
    • 1970-01-01
    • 2019-01-05
    • 2021-10-30
    相关资源
    最近更新 更多