>>> 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.
Теперь перепишем пример из предыдущего раздела, в котором мы хотели водки,