Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I sum tuples in a list where the first value is the same?

Tags:

python

I have a list of stocks and positions as tuples. Positive for buy, negative for sell. Example:

p = [('AAPL', 50), ('AAPL', -50), ('RY', 100), ('RY', -43)]

How can I sum the positions of stocks, to get the current holdings?

result = [('AAPL', 0), ('RY', 57)]
like image 793
pedram Avatar asked Aug 12 '13 19:08

pedram


1 Answers

I would do this using collections.Counter:

In [2]: from collections import Counter

In [3]: c = Counter()

In [4]: for k, v in p:
   ...:     c[k] += v
   ...:     
In [5]: c
Out[5]: Counter({'AAPL': 0, 'RY': 57})

Then you can call the most_common method of Counter objects to get a list of tuples sorted by the values in descending order.

In [5]: c.most_common()
Out[5]: [('RY', 57), ('AAPL', 0)]

In case you need to sort tuples by their first elements, use sorted(c.items()):

In [6]: sorted(c.items())
Out[6]: [('AAPL', 0), ('RY', 57)]
like image 181
vaultah Avatar answered Oct 05 '22 22:10

vaultah