It is not actually a dupe as you want to filter to only count characters from a certain set, you can use a Counter dict to do the counting and a set of allowed characters to filter by:
word = ["h", "e", "l", "l", "o"]
from collections import Counter
from string import ascii_lowercase
# create a set of the characters you want to count.
allowed = set(ascii_lowercase + 'ñ')
# use a Counter dict to get the counts, only counting chars that are in the allowed set.
counts = Counter(s for s in word if s in allowed)
If you actually just want the total sum:
total = sum(s in allowed for s in word)
Or using a functional approach:
total = sum(1 for _ in filter(allowed.__contains__, word))
Using filter is going to be a bit faster for any approach:
In [31]: from collections import Counter
...: from string import ascii_lowercase, digits
...: from random import choice
...:
In [32]: chars = [choice(digits+ascii_lowercase+'ñ') for _ in range(100000)]
In [33]: timeit Counter(s for s in chars if s in allowed)
100 loops, best of 3: 36.8 ms per loop
In [34]: timeit Counter(filter(allowed.__contains__, chars))
10 loops, best of 3: 31.7 ms per loop
In [35]: timeit sum(s in allowed for s in chars)
10 loops, best of 3: 35.4 ms per loop
In [36]: timeit sum(1 for _ in filter(allowed.__contains__, chars))
100 loops, best of 3: 32 ms per loop
If you want a case insensitive match, use ascii_letters and add 'ñÑ'
:
from string import ascii_letters
allowed = set(ascii_letters+ 'ñÑ')