Count element in tuple python

I am fairly new to python, but I haven't been able to find a solution to my problem anywhere.

I want to count the occurrences of a string inside a list of tuples.

Here is the list of tuples:

list1 = [
         ('12392', 'some string', 'some other string'),
         ('12392', 'some new string', 'some other string'),
         ('7862', None, 'some other string')
        ]

I've tried this but it just prints 0

for entry in list1:
    print list1.count(entry[0])

As the same ID occurs twice in the list, this should return:

2
1

I also tried to increment a counter for each occurrence of the same ID but couldn't quite grasp how to write it.

*EDIT: Using Eumiro's awesome answer. I just realized that I didn't explain the whole problem. I actually need the total amount of entries which has a value more than 1. But if I try doing:

for name, value in list1:

    if value > 1:
        print value

I get this error:

ValueError: Too many values to unpack

Cœur

35.6k24 gold badges188 silver badges257 bronze badges

asked Apr 15, 2013 at 10:59

Maybe collections.Counter could solve your problem:

from collections import Counter
Counter(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.

answered Apr 15, 2013 at 11:01

eumiroeumiro

198k33 gold badges294 silver badges259 bronze badges

6

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}

answered Apr 15, 2013 at 11:11

Count element in tuple python

jamylakjamylak

124k29 gold badges227 silver badges227 bronze badges

0

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}

answered Jan 24, 2019 at 6:49

Count element in tuple python

How do you count elements in a tuple in Python?

Python tuple method len() returns the number of elements in the tuple.

How do you count repeated elements in tuple Python?

You can use the Python tuple count() function to count the frequency of an element in a tuple. Pass the element for which you want to count the occurrences as an argument to the function. The following is the syntax. It returns the number of times the element appears in the tuple.

How do I find a number in a tuple?

Find the index of an element in tuple using index() Tuple provides a member function index() i.e. It returns the index for first occurrence of x in the tuple. Also, if element is not found in tuple then it will throw an exception ValueError.

How do you count number of times a word appears in a tuple?

Use count() method to find the number of times the given item appears in the tuple.