I am surprised nobody suggested we put those two methods into a separate module (say dictutils or even UserDict) as functions:
from dictutils import tally, listappend
tally(mydict, key) listappend(mydict, key, value)
Sorry to join the discussion so late (I've been away from my email for a week) but this was exactly my reaction too. In fact, I have a 'dicttools' module with similar methods in it:
# like "tally" but without ability to set increment def counts(iterable, key=None): result = {} for item in iterable: # apply key function if necessary if key is None: k = item else: k = key(item) # increment key's count try: result[k] += 1 except KeyError: result[k] = 1 return result
# like "listappend" but with the option to use key and value funcs def groupby(iterable, key=None, value=None): result = {} for item in iterable: # apply key function if necessary if key is None: k = item else: k = key(item) # apply value function if necessary if value is None: v = item else: v = value(item) # append value to key's list try: result[k].append(v) except KeyError: result[k] = [v] return result
These two functions have covered all my use cases for "tally" and "listappend" -- I always want to perform the increments or list appends over a sequence of values, so having functions that operate on sequences covers all my needs.
STeVe -- http://mail.python.org/mailman/listinfo/python-list