@Onyix67

Глупый вопрос по Python?

Я только начал учить пайтон. Нужно сделать цикл, который считает количество каждого символа в тексте. До меня никак не допрет, почему этот код не работает?

text = "eujiyghkiuyhjiu"
dic = {}
for c in text:
__dic[c] += 1

Выдает KeyError
Я создаю пустой словарь, в цикле перебираю каждый символ текста, записываю в словарь считая, сколько раз он встречается в тексте.

Или цикл работает не так, а выбирает сразу все одинаковые символы? Как тогда оптимально сделать?
  • Вопрос задан
  • 402 просмотра
Пригласить эксперта
Ответы на вопрос 3
aRegius
@aRegius
Python Enthusiast
Собственно, для решения подобного рода задач в Python есть класс Counter из модуля collections. Это и будет самый оптимальный и простой вариант:

>>> text = 'eujiyghkiuyhjiu'
>>> from collections import Counter
>>> Counter(text)
Counter({'u': 3, 'i': 3, 'h': 2, 'j': 2, 'y': 2, 'e': 1, 'k': 1, 'g': 1})
Ответ написан
Комментировать
Ba1t
@Ba1t
Интерпретатор выбрасывает вам исключение "KeyError", что говорит о том что такого ключа нет в словаре. Для начала его надо добавить. obez показал пример.
Для такого варианта как как вы хотите, надо использовать класс defaultdict
from collections import defaultdict

def_dic = defaultdict(int)
for c in text:
    def_dic[c] += 1
Ответ написан
Комментировать
@abcd0x00
>>> text = "eujiyghkiuyhjiu"
>>> 
>>> dic = {}
>>> 
>>> for c in text:
...     dic[c] = dic.get(c, 0) + 1
... 
>>> dic
{'e': 1, 'g': 1, 'u': 3, 'k': 1, 'h': 2, 'y': 2, 'j': 2, 'i': 3}
>>>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы