Jess Austin wrote: > Alex wrote: >> On Apr 4, 2006, at 10:53 PM, Jess Austin wrote: >>> Alex wrote: >>>> import collections >>>> def tally(seq): >>>> d = collections.defaultdict(int) >>>> for item in seq: >>>> d[item] += 1 >>>> return dict(d) [Jess again] >>> def tally(seq): >>> return dict((group[0], len(tuple(group[1]))) >>> for group in itertools.groupby(sorted(seq)))
>>> In general itertools.groupby() seems like a very clean way to do this >>> sort of thing, whether you want to end up with a dict or not. I'll go >>> so far as to suggest that the existence of groupby() obviates the >>> proposed tally(). Maybe I've just coded too much SQL and it has >>> warped my brain... > You're right in that it won't raise an exception on an iterator, but the > sorted() means that it's much less memory efficient than your version > for iterators. Another reason to avoid sorted() for this application, > besides the big-O. Anyway, I still like groupby() for this sort of > thing, with the aforementioned caveats. Functional code seems a little > clearer to me, although I realize that preference is not held > universally. However, sorted requires ordering. Try seq = [1, 1j, -1, -1j] * 5 Alex's tally works, but yours does not. -- -- Scott David Daniels [EMAIL PROTECTED] _______________________________________________ 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