Вы делаете способ слишком много работы. collections.Counter
считает вещи автоматически и даже сортирует по частоте:
from collections import Counter
s = "Would you like to travel with me?"
freq = Counter(s)
# Counter({' ': 6, 'o': 3, 'l': 3, 'e': 3, 't': 3, 'u': 2, 'i': 2, 'W': 1, 'd': 1, 'y': 1, 'k': 1, 'r': 1, 'a': 1, 'v': 1, 'w': 1, 'h': 1, 'm': 1, '?': 1})
Если вы хотите удалить пробелы из подсчета:
del freq[' ']
# Counter({'o': 3, 'l': 3, 'e': 3, 't': 3, 'u': 2, 'i': 2, 'W': 1, 'd': 1, 'y': 1, 'k': 1, 'r': 1, 'a': 1, 'v': 1, 'w': 1, 'h': 1, 'm': 1, '?': 1})
Также, в общем, ваш Алгоритм делает слишком много работы. string.count
включает в себя перебор всей строки для каждого символа, который вы пытаетесь посчитать. Вместо этого вы можете просто итерировать один раз по всей строке, и для каждой буквы вы просто продолжаете увеличивать ключ, связанный с этой буквой (инициализируйте его значением 1, если это буква, которую вы раньше не видели). По сути, это то, что Counter
делает для вас.
Правописание:
count = {}
for letter in the_string:
if not letter.isalpha():
continue
if letter not in count:
count[letter] = 1
else:
count[letter] += 1
А затем для сортировки вам не нужно сначала преобразовывать в список, вы можете просто сделать это напрямую:
ordered = sorted(count.items(), key=itemgetter(1), reverse=True)