Помогите пожалуйста)
Написать функцию, которая получает на вход слово и возвращает словарь, ключами
которого являются буквы, а значениями количество вхождений каждой из букв.
>>> slovo = "aaasfvcgh" >>> { k:slovo.count(k) for k in set(list(slovo)) } {'a': 3, 'c': 1, 'g': 1, 'f': 1, 'h': 1, 's': 1, 'v': 1}
>>> from collections import Counter
>>> Counter('vasya')
Counter({'a': 2, 'y': 1, 's': 1, 'v': 1})
>>> d = {}
>>> slovo = "aaasfvcgh"
>>> for x in set(slovo):
... d.update({x: slovo.count(x)})
...
>>> print d
{'a': 3, 'c': 1, 'g': 1, 'f': 1, 'h': 1, 'v': 1, 's': 1}Originatordip3. comprehensions
можно для не сведущих объяснить комбинацию команд.
Особенно применение k:slovo.count(k) в паре с for.
Прочитай про списочные выражения и всё стает понятным.class Counter(dict): def __init__(self, iterable=None, **kwds): super(Counter, self).__init__() self.update(iterable, **kwds) def update(self, iterable=None, **kwds): if iterable is not None: if isinstance(iterable, Mapping): if self: self_get = self.get for elem, count in iterable.iteritems(): self[elem] = self_get(elem, 0) + count else: super(Counter, self).update(iterable) else: self_get = self.get for elem in iterable: self[elem] = self_get(elem, 0) + 1 if kwds: self.update(kwds)
[guest@localhost ~]$ python3 -mtimeit -s "import collections; s = 'abc' * 100" "collections.Counter(s)"
10000 loops, best of 3: 173 usec per loop
[guest@localhost ~]$
[guest@localhost ~]$ python3 -mtimeit -s "s = 'abc' * 100" "{k: s.count(k) for k in set(s)}"
100000 loops, best of 3: 13.8 usec per loop
[guest@localhost ~]$