Используйте collections.Counter()
class вместо:
from collections import Counter
word_dict = Counter(word)
Counter
делает одно и то же; количество экземпляров каждой буквы в word
.
В вашем конкретном случае вы не впервые проверяли, существует ли ключ уже существующий или предоставляют значение по умолчанию, если оно отсутствует. Вы можете использовать dict.get()
, чтобы сделать это:
word = 'stacks'
word_dict = {} # to form new dictionary formed from
for letter in word:
word_dict[letter] = word_dict.get(letter, 0) + 1
print word_dict
или использовать dict.setdefault()
отдельно явно установить по умолчанию перед приращением:
word = 'stacks'
word_dict = {} # to form new dictionary formed from
for letter in word:
word_dict.setdefault(letter, 0)
word_dict[letter] += 1
print word_dict
или тест для ключа самостоятельно:
word = 'stacks'
word_dict = {} # to form new dictionary formed from
for letter in word:
if letter not in word_dict:
word_dict[letter] = 0
word_dict[letter] += 1
print word_dict
в уменьшении порядок эффективности.
Или вы могли бы использовать collections.defaultdict()
object автоматически вставить 0
если ключ еще не существует:
from collections import defaultdict
word_dict = defaultdict(int)
for letter in word:
word_dict[letter] += 1
print word_dict
Это, по существу, что делает Counter
класс, но тип добавляет некоторые другие тонкости, такие как перечисление наиболее распространенных ключей или объединение счетчиков.
Демо:
>>> from collections import defaultdict, Counter
>>> word = 'stacks'
>>> word_dict = {} # to form new dictionary formed from
>>> for letter in word:
... word_dict[letter] = word_dict.get(letter, 0) + 1
...
>>> word_dict
{'a': 1, 'c': 1, 's': 2, 't': 1, 'k': 1}
>>> word_dict = defaultdict(int)
>>> for letter in word:
... word_dict[letter] += 1
...
>>> word_dict
defaultdict(<type 'int'>, {'a': 1, 'c': 1, 's': 2, 't': 1, 'k': 1})
>>> Counter(word)
Counter({'s': 2, 'a': 1, 'c': 1, 't': 1, 'k': 1})
возможный дубликат [подсчета частоты каждой буквы в строке] (http://stackoverflow.com/questions/10806866/counting-each- letters-frequency-in-a-string) – myaut