Как выбирать структуру
Практикум построен вокруг выбора структуры данных. Если нужен набор уникальных значений - set. Если нужен поиск по имени - dict. Если набор должен быть ключом - frozenset.
- set comprehension - фильтрация и уникальность
- dict comprehension - преобразование списка в словарь
- items() - проверка пар ключ-значение
- setdefault() - группировка нескольких значений под одним ключом
Подмножество словаря
Для словаря недостаточно проверить, что ключи dict1 есть в dict2. Значения тоже должны совпадать.
dict1 = {"a": 1, "b": 2}
dict2 = {"a": 1, "b": 2, "c": 3}
is_subset = all(item in dict2.items() for item in dict1.items())
print(is_subset)Рецепты и frozenset
В рецептах порядок ингредиентов не должен влиять на ключ. frozenset решает это: frozenset(['egg', 'milk']) равен frozenset(['milk', 'egg']).
recipes = {
("flour", "egg", "milk"): "Pancakes",
("milk", "flour", "egg"): "Waffles",
}
grouped = {}
for ingredients, recipe in recipes.items():
grouped.setdefault(frozenset(ingredients), []).append(recipe)
print(grouped[frozenset(["egg", "milk", "flour"])])Замечание по источнику
В задании "Потерянные страницы книги" текст задачи говорит о замене None на "Страница потеряна", но пример вывода в источнике относится к координатной сетке. В уроке решение следует формулировке задачи.
None, пустая строка, 0 и пустой список могут иметь разный бизнес-смысл.