On 05/18/2016 05:59 PM, 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)
]


This drops the first element in each tuple:
alist = [(b,c,d) for a,b,c,d in alist]

Slicing may be more efficient (perhaps, perhaps not -- don't know). And probably effectively no difference, but slightly shorter to write.

alist = [t[1:] for t in alist]


And this summation creates 2 lists that then have to be combined:

groups1 = defaultdict(int)
for nm, matches, words in alist:
     groups1[nm] += matches

groups2 = defaultdict(int)
for nm, matches, words in alist:
     groups2[nm] += words



Is there something shorter and sweeter for the summation?

Thanks


Why two loops? Put both summations in a single loop. Then you're only scanning the alist once instead of twice.

groups1 = defaultdict(int)
groups2 = defaultdict(int)
for nm, matches, words in alist:
    groups1[nm] += matches
    groups2[nm] += words

     -=- Larry -=-

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to