✅ Решения

⚡ Кратко: решения

Set comprehension создаёт множество из выражения, цикла и необязательного условия.

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

Словарь хранит пары ключ-значение; ключ должен быть уникальным и хешируемым.

dict() создаёт словарь из именованных аргументов или последовательности пар.

Доступ через dictionary[key] быстрый, но отсутствующий ключ вызывает KeyError.

Оператор in проверяет наличие ключа, а не значения.

update() добавляет новые пары и перезаписывает существующие ключи.

del и pop() удаляют по ключу; pop() ещё возвращает удалённое значение.

Топ-3 ошибки: создавать пустое множество через {}, хотя это пустой dict; использовать list или set как ключ словаря; читать отсутствующий ключ через [] без проверки.

Решение 1. Уникальные длины

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

Множество оставляет только 5 и 6.

Решение 2. frozenset и union

immutable_set = frozenset([1, 2, 3])
new_set = immutable_set.union({4, 5})
print(new_set)

union() возвращает новый frozenset, исходный объект не меняется.

Решение 3. Проверка типов ключей

candidates = [1, True, {1, 2}, 1.5, {"a": 1}, (1, 2), [1, 2], frozenset([1, 2])]

for value in candidates:
    try:
        test = {value: "ok"}
        print(type(value).__name__, "можно")
    except TypeError:
        print(type(value).__name__, "нельзя")

Нехешируемые изменяемые объекты нельзя использовать как ключи.

Решение 4. Инверсия

original_dict = {"a": 1, "b": 2, "c": 3}
inverted_dict = {}

for key, value in original_dict.items():
    inverted_dict[value] = key

print("Инверсированный словарь:", inverted_dict)

items() сразу даёт ключ и значение, поэтому код короче.

Решение 5. Неуникальные числа

numbers = [4, 7, 3, 7, 8, 3, 4, 2, 7, 3, 8, 4]
duplicates = []

for number in sorted(set(numbers), reverse=True):
    if numbers.count(number) > 1:
        duplicates.append(number)

print("Числа, встречающиеся более одного раза:", duplicates)

set(numbers) оставляет кандидатов, count() проверяет повтор.

Решение 6. Подмножество словаря

dict1 = {"a": 1, "b": 2}
dict2 = {"a": 1, "b": 2, "c": 3}

is_subset = True
for key, value in dict1.items():
    if key not in dict2 or dict2[key] != value:
        is_subset = False
        break

if is_subset:
    print("Первый словарь является подмножеством второго.")

Проверяются и ключи, и соответствующие значения.