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

>>> lunch_counter

Counter({'eggs': 2, 'bacon': 1})

Счетчики можно объединить с помощью оператора +:

>>> breakfast_counter + lunch_counter

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

Как вы можете догадаться, счетчики можно вычитать друг из друга с помощью

оператора -. Что мы будем есть на завтрак, но не на обед?

>>> breakfast_counter — lunch_counter

Counter({'spam': 3})

О’кей, теперь узнаем, что мы можем съесть на обед, но не можем на завтрак:

>>> lunch_counter — breakfast_counter

Counter({'bacon': 1, 'eggs': 1})

По аналогии с множествами, показанными в главе 4, вы можете получить общие

элементы с помощью оператора пересечения &:

>>> breakfast_counter & lunch_counter

Counter({'eggs': 1})

В результате пересечения был получен общий элемент ('eggs') с низким значе-

нием счетчика. Это имеет смысл: на завтрак у нас было только одно яйцо, поэтому

указанное количество является общим.

Наконец, вы можете получить все элементы с помощью оператора объедине-

ния |:

>>> breakfast_counter | lunch_counter

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

Элемент 'eggs' снова оказался общим для обоих счетчиков. В отличие от сло-

жения объединение не складывает счетчики, а выбирает тот, который имеет наи-

большее значение.

Упорядочиваем по ключу

с помощью OrderedDict()

Многие примеры кода, показанные в первых главах этой книги, демонстрируют, что

порядок ключей в словаре нельзя предсказать: вы можете добавить в определенном

152

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

порядке ключи a, b и c, но функция keys() вернет результат "c, a, b". Рассмотрим

модифицированный пример из главы 1:

>>> quotes = {

... 'Moe': 'A wise guy, huh?',

... 'Larry': 'Ow!',

... 'Curly': 'Nyuk nyuk!',

... }

>>> for stooge in quotes:

... print(stooge)

...

Larry

Curly

Moe

Словарь OrderedDict() запоминает порядок, в котором добавлялись ключи, и воз-

вращает их в том же порядке с помощью итератора. Попробуем создать OrderedDict

из последовательности кортежей вида «ключ — значение»:

>>> from collections import OrderedDict

>>> quotes = OrderedDict([