Итак, согласно вашему обновленному ответу (1 слово в строке, уже отсортировано по алфавиту), примерно так должно работать:
import string
def main():
try:
# this initiates our counter with 0 for each letter
letter_count = {letter: 0 for letter in list(string.ascii_lowercase)}
with open("words.txt", 'r') as fp:
for line in fp:
line = line.strip()
initial = line[0].lower()
letter_count[initial] += 1 # and here we increment per word
print(letter_count)
except EOFError as e:
print(e)
if __name__ == "__main__":
main()
UPDATE:
Хорошо, что вы не просто хотите получить готовое решение, но у вашего кода есть несколько проблем, и некоторые моменты не являются супер-пифоническими, поэтому я предложил сделать это, как описано выше. Если вы действительно хотите использовать свое решение, вам нужно исправить функцию counterByLetter
. Проблема в том, что вы на самом деле нигде не храните результаты, вы всегда возвращаете новый массив результатов для каждого слова. Вероятно, у вас есть слово, начинающееся с 'z', как последнее слово в файле, поэтому в результате в качестве числа всех букв будет 0
, кроме «z», в котором оно есть. Вам нужно обновить значения для текущей буквы в этой функции, вместо того, чтобы вычислять весь массив сразу.