Alex Martelli wrote: > On Apr 4, 2006, at 8:01 AM, Jeremy Hylton wrote: > >> On 4/4/06, Alex Martelli <[EMAIL PROTECTED]> wrote: >>> import collections >>> def tally(seq): >>> d = collections.defaultdict(int) >>> for item in seq: >>> d[item] += 1 >>> return dict(d) > ... >> Putting it somewhere in collections seems like a great idea. >> defaultdict is a bit odd, because the functionality doesn't have >> anything to do with defaults, just dicts. maybe a classmethod on >> regular dicts would make more sense? > > Good points: it should probably be a classmethod on dict, or a > function in module collections. > >> I write this function regularly, so I'd be happy to have it >> available directly. > > Heh, same here -- soon as I saw it proposed on c.l.py I recognized an > old friend and it struck me that, simple but widely used, it should > be somewhere in the standard library.
Why not make it collections.bag, like the following: class bag(dict): def __init__(self, iterable=None): dict.__init__(self) if iterable: self.update(iterable) def update(self, iterable): for item in iterable: self.add(item) def add(self, item): self[item] = self.get(item, 0) + 1 def remove(self, item): if self[item] == 1: del self[item] else: self[item] -= 1 def count(self, item): return self[item] (etc.) Georg _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com