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([