Сначала создайте букву для подсчета сопоставления, затем измените это сопоставление.Использование модуля collections
:
from collections import defaultdict, Counter
text = 'theerrrdd'
# create dictionary mapping letter to count
letter_count = Counter(text)
# reverse mapping to give count to letters mapping
count_letters = defaultdict(list)
for letter, count in letter_count.items():
count_letters[count].append(letter)
Результат:
print(count_letters)
defaultdict(<class 'list'>, {1: ['t', 'h'],
2: ['e', 'd'],
3: ['r']})
Затем, например, count_letters[2]
дает вам все буквы, которые встречаются дважды во входной строке.
Использование str.count
в цикле неэффективно, так как требует полной итерации вашей строки для каждой буквы .Другими словами, такой алгоритм имеет квадратичную сложность, в то время как collections.Counter
имеет линейную сложность.