Finding a sum in nested list using a lambda function
I have a data structure similar to this
table = [
("marley", "5"),
("bob", "99"),
("another name", "3")
]
What I would like to do, to get the sum of the 2nd column (5 + 99 + 3) functionally like this:
total = sum(table, lambda tup : int(tup[1]))
That would be similar syntax to the python function sorted
, but that's not how you would use python's sum
function.
What's the pythonic/functional way to sum up the second column?
One approach is to use a generator expression:
total = sum(int(v) for name,v in table)
reduce can help
from functools import reduce
total = reduce(lambda accumulator,element:accumulator+int(element[1]), table,0)
If you want to use lambda the following should solve it:
total = sum(map(lambda x: int(x[1]), table))
sum(map(int,zip(*table)[-1]))
is one way to do it ... there are many options however
You can also get at the values in a dictionary:
total = sum(map(int, dict(table).values())
This may be a little obscure.