使用Counter聚合值

  • 本文关键字:Counter 使用 python
  • 更新时间 :
  • 英文 :


有没有一种方法可以使用Counter聚合列表中每个条目的值,而不仅仅是计算条目存在的时间?

例如,如果我有一个列表

from collections import Counter
lst = [
['John', 1],
['James', 2],
['John', 3],
['Andy', 1]
]

我做

total = Counter(name for name, num in lst)
print(total)

输出将是

Counter({'John': 2, 'James': 1, 'Andy': 1})

这是意料之中的事。我只是想知道是否有办法获得

Counter({'John': 4, 'James': 2, 'Andy': 1})

我知道有很多方法可以做到这一点,但我正在寻找一种使用Counter的方法。

为发布的列表理解添加另一个级别的for循环

total = Counter(name for name, num in lst for _ in range(num))
print(total)
# Output: Counter({'John': 4, 'James': 2, 'Andy': 1})

您可以使用一个简单的循环来添加值:

total = Counter()
for name, num in lst:
total[name] += num
print(total)  # -> Counter({'John': 4, 'James': 2, 'Andy': 1})

如果有一种方法可以在O(n(中的一行中做到这一点,我很想知道。

您需要循环浏览列表并相应地更新计数器。

c = Counter()
for k, v in lst:
c.update({k: v})
>>> print(c)
Counter({'John': 4, 'James': 2, 'Andy': 1})

你也可以使用列表理解,但不建议使用副作用理解:

[c.update({k: v}) for k, v in lst]
print(c)

输出是相同的。

最新更新