bpo-25478: Add total() method to collections.Counter (GH-25829)

This commit is contained in:
Raymond Hettinger 2021-05-02 20:19:51 -07:00 committed by GitHub
parent d52bbde942
commit 8c598dbb94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 1 deletions

View File

@ -313,6 +313,16 @@ For example::
.. versionadded:: 3.2
.. method:: total()
Compute the sum of the counts.
>>> c = Counter(a=10, b=5, c=0)
>>> c.total()
15
.. versionadded:: 3.10
The usual dictionary methods are available for :class:`Counter` objects
except for two which work differently for counters.
@ -342,7 +352,7 @@ All of those tests treat missing elements as having zero counts so that
Common patterns for working with :class:`Counter` objects::
sum(c.values()) # total of all counts
c.total() # total of all counts
c.clear() # reset all counts
list(c) # list unique elements
set(c) # convert to a set

View File

@ -581,6 +581,10 @@ class Counter(dict):
# Needed so that self[missing_item] does not raise KeyError
return 0
def total(self):
'Sum of the counts'
return sum(self.values())
def most_common(self, n=None):
'''List the n most common elements and their counts from the most
common to the least. If n is None, then list all element counts.

View File

@ -2066,6 +2066,10 @@ class TestCounter(unittest.TestCase):
self.assertRaises(TypeError, Counter, (), ())
self.assertRaises(TypeError, Counter.__init__)
def test_total(self):
c = Counter(a=10, b=5, c=0)
self.assertEqual(c.total(), 15)
def test_order_preservation(self):
# Input order dictates items() order
self.assertEqual(list(Counter('abracadabra').items()),

View File

@ -0,0 +1,2 @@
Added a *total()* method to collections.Counter() to compute the sum of the
counts.