Аналогичное решение для @heemayl, с более строгим кодом, которое работает на Python 2.7 и Python 3.
#!/usr/bin/python
import collections
import fileinput
import itertools
import string
count = collections.Counter(itertools.chain(*fileinput.input()))
print(',\n'.join('{} - {}'.format(c, count[c] + count[c.upper()])
for c in string.ascii_lowercase))
Первое утверждение, count = collections.Counter(…) выполняет всю реальную работу.
fileinput.input() читает каждую строку ввода, которая может быть передана через stdin или в качестве аргументов командной строки. * заставляет его рассматривать персонажа одновременно, а не линию за раз. count = Counter(…) учитывает вхождения каждого символа эффективно за один проход и сохраняет результат в переменной count.Вторая строка просто печатает результаты.
fileinput.input() читает каждую строку ввода, которая может быть передана через stdin или в качестве аргументов командной строки. print(',\n'.join(…)) помещает его в желаемый формат: по одному на строку, разделен запятыми, но нет запятой в последней строке.