Counting the amount of occurrences in a list of tuples Counting the amount of occurrences in a list of tuples python python

Counting the amount of occurrences in a list of tuples


Maybe collections.Counter could solve your problem:

from collections import CounterCounter(elem[0] for elem in list1)

returns

Counter({'12392': 2, '7862': 1})

It is fast since it iterates over your list just once. You iterate over entries and then try to get a count of these entries within your list. That cannot be done with .count, but might be done as follows:

for entry in list1:    print(sum(1 for elem in list1 if elem[0] == entry[0]))

But seriously, have a look at collections.Counter.

EDIT: I actually need the total amount of entries which has a value more than 1.

You can still use the Counter:

c = Counter(elem[0] for elem in list1)sum(v for k, v in c.iteritems() if v > 1)

returns 2, i.e. the sum of counts that are higher than 1.


list1.count(entry[0]) will not work because it looks at each of the three tuples in list1, eg. ('12392', 'some string', 'some other string') and checks if they are equal to '12392' for example, which is obviously not the case.

@eurmiro's answer shows you how to do it with Counter (which is the best way!) but here is a poor man's version to illustrate how Counter works using a dictionary and the dict.get(k, [,d]) method which will attempt to get a key (k), but if it doesn't exist it returns the default value instead (d):

>>> list1 = [         ('12392', 'some string', 'some other string'),         ('12392', 'some new string', 'some other string'),         ('7862', None, 'some other string')]>>> d = {}>>> for x, y, z in list1:        d[x] = d.get(x, 0) + 1>>> d{'12392': 2, '7862': 1}


I needed some extra functionality that Counter didn't have. I have a list of tuples that the first element is the key and the second element is the amount to add. @jamylak solution was a great adaptation for this!

>>> list = [(0,5), (3,2), (2,1), (0,2), (3,4)]>>> d = {}>>> for x, y in list1:    d[x] = d.get(x, 0) + y>>> d{0: 7, 2: 1, 3: 6}