Переписать в словарное понимание

Я хочу подсчитать появление всех букв в слове, используя словарь. До сих пор я пытался добавить в цикл for dict.

Интересно, можно ли использовать словарные понимания?

word = "aabcd"
occurrence = {}
for l in word.lower():
    if l in occurrence:
        occurrence[l] += 1
    else:
        occurrence[l] = 1

person Tomonaga    schedule 12.06.2019    source источник
comment
Возможный дубликат Частота слов с пониманием словаря   -  person nofinator    schedule 12.06.2019


Ответы (2)


Конечно, это возможно.

Используйте Counter.

from collections import Counter

c = Counter(word)

print(c)

Counter({'a': 2, 'b': 1, 'c': 1, 'd': 1})
person gold_cy    schedule 12.06.2019
comment
при использовании count лучше использовать for k in set(word) , это уменьшит итерацию - person sahasrara62; 12.06.2019
comment
если размер списка велик (скажем, 10 ^ 5 или более), для вышеуказанного метода он будет проверять каждый символ, подсчитывать его частоту и перезаписывать частоту снова и снова, позже сначала он найдет уникальный элемент, а затем подсчитает частоту. так что это сэкономит время, при условии, что мемоизация есть или нет (не знаю, реализована ли она в методе count() или нет), например, запустите код для word='aabcd'*100000 и для обоих случаев см. разницу во времени - person sahasrara62; 12.06.2019
comment
Используя Counter как правильное решение (это именно то, для чего предназначен этот класс), дебаты о том, должен ли OP составлять список, довольно бесполезны... - person bruno desthuilliers; 12.06.2019

Другое решение с использованием defaultdict.

from collections import defaultdict

occurrence = defaultdict(int)
for c in word.lower():
    occurrence[c] += 1

print(occurrence)

defaultdict(<class 'int'>, {'a': 2, 'b': 1, 'c': 1, 'd': 1})

Или другой без использования импорта.

occurrence = {}
for c in word.lower():
    occurrence[c] = occurrence.get(c,0) + 1

print(occurrence)

{'a': 2, 'b': 1, 'c': 1, 'd': 1}
person Gábor Fekete    schedule 12.06.2019