Summing/combining tuples

Dan Sommers dan at tombstonezero.net
Fri May 20 23:19:49 EDT 2016


On Wed, 18 May 2016 20:59:55 -0400, DFS wrote:

> Have  aList = [
> ('x','Name1', 1, 85),
> ('x','Name2', 3, 219),
> ('x','Name2', 1, 21),
> ('x','Name3', 6, 169)
> ]
> 
> want
> 
> aList = [
> ('Name1', 1, 85),
> ('Name2', 4, 240),
> ('Name3', 6, 169)
> ]

[snip]

> Is there something shorter and sweeter for the summation?

    from itertools import groupby
    from operator import itemgetter

    result = [(k,
               sum(map(itemgetter(2), v)),
               sum(map(itemgetter(3), v)))
              for (k, v) in [(k, list(v))
                             for (k, v)
                             in groupby(aList, itemgetter(1))]])

Shorter?  In terms of number of expressions, yes.  In terms of
characters typed, no.

Sweeter?  YMMV.

HTH,
Dan



More information about the Python-list mailing list