Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 111

>>> for food in ['spam', 'spam', 'eggs', 'spam']:

... food_counter[food] += 1

...

>>> for food, count in food_counter.items():

... print(food, count)

150

Глава 5. Py Boxes: модули, пакеты и программы

...

eggs 1

spam 3

В предыдущем примере, если бы food_counter был обычным словарем, а не

defaultdict, Python генерировал бы исключение всякий раз, когда бы мы пытались

увеличить элемент словаря food_counter[food], поскольку он был бы не инициали-

зирован. Нам понадобилось бы сделать дополнительную работу, как показано здесь:

>>> dict_counter = {}

>>> for food in ['spam', 'spam', 'eggs', 'spam']:

... if not food in dict_counter:

... dict_counter[food] = 0

... dict_counter[food] += 1

...

>>> for food, count in dict_counter.items():

... print(food, count)

...

spam 3

eggs 1

Подсчитываем элементы

с помощью функции Counter()

Если говорить о счетчиках, то в стандартной библиотеке имеется счетчик, который

решает задачу, показанную в предыдущем примере, и даже больше:

>>> from collections import Counter

>>> breakfast = ['spam', 'spam', 'eggs', 'spam']

>>> breakfast_counter = Counter(breakfast)

>>> breakfast_counter

Counter({'spam': 3, 'eggs': 1})

Функция most_common() возвращает все элементы в убывающем порядке или

лишь те элементы, количество которых больше, чем заданный аргумент count:

>>> breakfast_counter.most_common()

[('spam', 3), ('eggs', 1)]

>>> breakfast_counter.most_common(1)

[('spam', 3)]

Счетчики можно объединять. Для начала снова взглянем на содержимое

breakfast_counter:

>>> breakfast_counter

>>> Counter({'spam': 3, 'eggs': 1})

Стандартная библиотека Python

151

Теперь мы создадим новый список, который называется lunch, и счетчик, кото-

рый называется lunch_counter:

>>> lunch = ['eggs', 'eggs', 'bacon']

>>> lunch_counter = Counter(lunch)