Курс Python → Хешируемые ключи в Python

Для того чтобы понять, как объекты становятся ключами словаря в Python, необходимо разобраться в понятии хеширования. Хеширование — это процесс преобразования данных произвольной длины в строку фиксированной длины. Ключи словаря должны быть хешируемыми, то есть иметь неизменяемое состояние, чтобы быть уникальными и идентифицируемыми при доступе к ним в словаре.

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


# Пример использования кортежа в качестве ключа словаря
my_dict = {(1, 2): 'значение'}
print(my_dict[(1, 2)])  # 'значение'

# Нехешируемый объект в кортеже
my_dict = {([1, 2], 3): 'значение'}  # Ошибка TypeError

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

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

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Тип CodeType в Python.
  2. Метод get() для словарей
  3. Работа с итераторами через срезы
  4. Копирование объектов в Python
  5. Метод rrshift для пользовательских объектов
  6. Логирование с Logzero
  7. Работа с кортежами в Python
  8. Деление в Python
  9. Необязательные аргументы в Python
  10. Метод rxor для операции побитового исключающего «или»
  11. Комментарии в Python
  12. Распаковка значений в Python
  13. Метод rsub в Python: расширение функциональности вычитания
  14. Python: отличительная особенность — отступы
  15. Работа со списками
  16. Множественное назначение в Python
  17. Метод __ixor__ для побитового исключающего ИЛИ
  18. Оптимизация поиска в словарях
  19. Применение команды break
  20. Создание словаря и множества
  21. Повторение и перенос строки
  22. Метод remove() для удаления элемента из списка
  23. Оператор «not» в Python
  24. Импорт классов из другого файла
  25. Оператор match в Python
  26. Декоратор Property в Python
  27. Управление памятью в Python
  28. Counter() — подсчет элементов
  29. Создание лямбда-функций
  30. Непрерывная проверка в Python
  31. Работа с коллекциями Python
  32. Управление контекстом с помощью декоратора contextmanager
  33. Названия столбцов в Python таблицах
  34. Функция product() из itertools
  35. Встраивание HTML в Jupyter Notebook
  36. Синхронизация потоков с time.sleep()
  37. Динамическая типизация в Python
  38. Форматирование чисел в Python
  39. Импорт модулей в Python 3.12
  40. Обратное распространение ошибки
  41. Приоритет операций в Python
  42. Многоточие в Python
  43. Шаблоны Flask: условия и циклы
  44. Форматирование строк в Python
  45. Структурирование данных с Pydantic
  46. Избегайте пустого списка
  47. None в Python: использование и особенности

Marketello читают маркетологи из крутых компаний