Я хотел бы дополнить отличный ответ @ Infinity этим примером, основанным на re
:
import re
from collections import defaultdict
s = 'ABC 123 doe ray me!'
res = defaultdict(int)
res['upper'] = len(re.findall(r'[A-Z]', s))
res['lower'] = len(re.findall(r'[a-z]', s))
res['spaces'] = len(re.findall(r' ', s))
res['digits'] = len(re.findall(r'\d', s))
print(res)
Отредактировано:
Также я написал такой компактный творческий код с itertools.starmap
:
import re
from itertools import starmap
s = 'ABC 123 doe ray me!'
counts = starmap(lambda pattern: len(re.findall(pattern, s)),
((r'[A-Z]',), (r'[a-z]',), (r' ',), (r'\d',)))
res = {}
res['upper'], res['lower'], res['spaces'], res['digits'] = counts
print(res)
Может быть, кому-то это покажется интересным (или слишком нечитаемым).