Применение списка и кортежа в качестве ключей словаря

Обычный list нехешируем и не подходит для ключа dict. Tuple подходит только тогда, когда все его элементы также хешируемы.

Короткий ответ

Что ответить на собеседовании

Обычный list нехешируем и не подходит для ключа dict. Tuple подходит только тогда, когда все его элементы также хешируемы.

Подробный разбор

Ответ с пояснениями

Условие

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

# TODO: пример с dict, list и tuple

Ответ

Обычный list нехешируем и не подходит для ключа dict. Tuple подходит только тогда, когда все его элементы также хешируемы.

mapping = {}
# mapping[[1, 2]] = 'value'  # TypeError: unhashable type: 'list'
mapping[(1, 2)] = 'value'
assert mapping[(1, 2)] == 'value'

Утверждение «кортеж с любыми теми же элементами может быть ключом» требует уточнения:

# mapping[(1, [2])] = 'value'  # Тоже TypeError.

Кортеж неизменяем как контейнер, но вложенный список остаётся нехешируемым. Словарю нужны ключи со стабильным хешем и согласованным равенством. Для вложенных структур следует явно строить неизменяемое представление, не рассчитывая, что одного внешнего tuple(...) всегда достаточно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее