diff options
author | Raymond Hettinger <python@rcn.com> | 2011-08-09 20:00:40 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2011-08-09 20:00:40 (GMT) |
commit | fcb393c0183c6a8cf47eb9575a1bbe6bc5d236e4 (patch) | |
tree | 51c5d45f70cd9946a373083bd31ddc2f109a9647 /Lib | |
parent | 18205baf251495b5a54b08c1f9b0e1763eb27aa1 (diff) | |
download | cpython-fcb393c0183c6a8cf47eb9575a1bbe6bc5d236e4.zip cpython-fcb393c0183c6a8cf47eb9575a1bbe6bc5d236e4.tar.gz cpython-fcb393c0183c6a8cf47eb9575a1bbe6bc5d236e4.tar.bz2 |
Add support for unary plus and unary minus to collections.Counter()
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/collections/__init__.py | 11 | ||||
-rw-r--r-- | Lib/test/test_collections.py | 5 |
2 files changed, 16 insertions, 0 deletions
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index 03bd2b3..2007e68 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -672,6 +672,17 @@ class Counter(dict): result[elem] = newcount return result + def __pos__(self): + 'Adds an empty counter, effectively stripping negative and zero counts' + return self + Counter() + + def __neg__(self): + '''Subtracts from an empty counter. Strips positive and zero counts, + and flips the sign on negative counts. + + ''' + return Counter() - self + ######################################################################## ### ChainMap (helper for configparser and string.Template) diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index eb6d4d7..04c4d97 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -943,6 +943,11 @@ class TestCounter(unittest.TestCase): c.subtract('aaaabbcce') self.assertEqual(c, Counter(a=-1, b=0, c=-1, d=1, e=-1)) + def test_unary(self): + c = Counter(a=-5, b=0, c=5, d=10, e=15,g=40) + self.assertEqual(dict(+c), dict(c=5, d=10, e=15, g=40)) + self.assertEqual(dict(-c), dict(a=5)) + def test_helper_function(self): # two paths, one for real dicts and one for other mappings elems = list('abracadabra') |