Michele Simionato wrote:
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

Reply via email to