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

ветствующие значения — множествами ингредиентов:

>>> drinks = {

... 'martini': {'vodka', 'vermouth'},

... 'black russian': {'vodka', 'kahlua'},

... 'white russian': {'cream', 'kahlua', 'vodka'},

... 'manhattan': {'rye', 'vermouth', 'bitters'},

... 'screwdriver': {'orange juice', 'vodka'}

... }

Несмотря на то что и словарь, и множества окружены фигурными скобками

({ и }), множество — это всего лишь последовательность значений, а словарь — это

набор пар «ключ — значение».

Какой из коктейлей содержит в себе водку? (Обратите внимание на то, что для

выполнения этих проверок я заранее демонстрирую использование ключевых слов

for, if, and и or, которые будут рассмотрены только в следующей главе.)

>>> for name, contents in drinks.items():

... if 'vodka' in contents:

... print(name)

...

screwdriver

martini

black russian

white russian

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

напоминает керосин:

>>> for name, contents in drinks.items():

... if 'vodka' in contents and not ('vermouth' in contents or

... 'cream' in contents):

... print(name)

...

screwdriver

black russian

Перепишем этот пример чуть более сжато в следующем разделе.

94

Глава 3. Наполнение Python: списки, кортежи, словари и множества

Комбинации и операторы

Что, если вам нужно проверить наличие сразу нескольких значений множества?

Предположим, вы хотите найти любой напиток, содержащий апельсиновый сок

или вермут. Для этого мы используем оператор пересечения множеств (&):

>>> for name, contents in drinks.items():

... if contents & {'vermouth', 'orange juice'}:

... print(name)

...

screwdriver

martini

manhattan

Результатом работы оператора & является множество, содержащее все элементы,

которые находятся в обоих сравниваемых списках. Если ни один из заданных ин-

гредиентов не содержится в предлагаемых коктейлях, оператор & вернет пустое

множество. Этот результат можно считать равным False.

Теперь перепишем пример из предыдущего раздела, в котором мы хотели водки,