Что выведет этот код?


d = {{1: 2}: "value"}

Ошибка. Ключами словаря в Python должны быть неизменяемые объекты. Список, словарь и множество - изменяемые, и не могут быть ключами словарей. Числа, строки и кортежи - могут.

Вопрос касается того, почему следующий код вызовет ошибку `TypeError: unhashable type: 'dict'` в Python:


d = {{1: 2}: "value"}
  

Причина ошибки:

Ключи словаря в Python должны быть hashable (хешируемыми). Объекты, которые хешируются, должны быть неизменяемыми (immutable). Это необходимо для эффективной работы словаря, так как хеш ключа используется для быстрого поиска значения.

Словарь (dict) является изменяемым (mutable) типом данных. Это значит, что его можно изменять после создания (добавлять, удалять, изменять элементы). Из-за этой изменяемости словарь не является хешируемым и не может быть использован в качестве ключа другого словаря или элемента множества (set).

В примере выше, {1: 2} является словарем. Попытка использовать его в качестве ключа другого словаря (d) приводит к ошибке `TypeError`, потому что словарь не является хешируемым.

Как исправить:

Чтобы исправить ошибку, необходимо использовать неизменяемый тип данных в качестве ключа. Обычно это делается с помощью:

  • Кортеж (tuple): Кортежи неизменяемы, поэтому их можно использовать в качестве ключей словаря.
  • Строка (string): Строки тоже неизменяемы.
  • Числа (int, float): Числа также являются неизменяемыми.
  • Замороженное множество (frozenset): Неизменяемая версия множества.

Пример исправления (использование кортежа):


d = {(1, 2): "value"} # Теперь ключ - кортеж (1, 2)
print(d[(1, 2)]) # Выведет "value"
  

В данном примере, кортеж (1, 2) может выступать в качестве ключа, так как является неизменяемым.

0