💻 Примеры

⚡ Кратко: примеры

Практикум 9 закрепляет set, dict, frozenset и вложенные структуры.

Для чисел, кратных 3 или 5, подходит set comprehension с условием.

Общие ключи двух словарей удобно искать через пересечение set(dict1) & set(dict2).

Список строк превращается в словарь длин через dict comprehension.

Подмножество словаря означает совпадение пар ключ-значение, а не только ключей.

Пустые значения можно удалить comprehension с проверкой truthiness.

frozenset нужен как ключ, когда набор элементов не должен зависеть от порядка.

В задачах с вводом отделяйте чистую логику от input(), чтобы проще тестировать.

Топ-3 ошибки: проверять подмножество словаря только по ключам; терять рецепты с одинаковым набором ингредиентов; использовать set как ключ вместо frozenset.

Числа кратные 3 или 5

Set comprehension фильтрует и убирает дубликаты.

numbers = [16, 18, 1, 6, 3, 2, 6, 2, 14, 3, 20, 15, 19, 4, 18, 15, 15, 4, 20, 18]
result = {number for number in numbers if number % 3 == 0 or number % 5 == 0}
print(result)

Строки с длиной

Dict comprehension превращает список строк в словарь.

words = ["apple", "banana", "cherry", "date"]
lengths = {word: len(word) for word in words}
print(lengths)

База оценок студентов

Вложенный словарь хранит исходные оценки и средний балл.

grades = {
    "anna": [5, 4, 3, 5],
    "bennet": [3, 2, 4],
    "john": [5, 5, 5],
}

result = {}
for student, marks in grades.items():
    result[student] = {
        "оценки": marks,
        "средний балл": sum(marks) / len(marks),
    }

print(result)

Одинаковые предметы

frozenset группирует студентов по идентичному набору предметов.

students = {
    "Alice": ["Math", "Physics"],
    "Bob": ["Math", "Physics"],
    "Charlie": ["Chemistry", "Biology"],
    "David": ["Math", "Physics"],
    "Eve": ["Chemistry", "Biology"],
}

groups = {}
for student, subjects in students.items():
    groups.setdefault(frozenset(subjects), []).append(student)

for subjects, names in groups.items():
    print(f"Группа с предметами: {', '.join(sorted(subjects))}: {names}")