Курс Python → Хешируемые ключи в Python
Для того чтобы понять, как объекты становятся ключами словаря в Python, необходимо разобраться в понятии хеширования. Хеширование — это процесс преобразования данных произвольной длины в строку фиксированной длины. Ключи словаря должны быть хешируемыми, то есть иметь неизменяемое состояние, чтобы быть уникальными и идентифицируемыми при доступе к ним в словаре.
Одним из примеров нехешируемого объекта является кортеж, содержащий в себе неизменяемый объект, например, список. Поскольку список изменяемый, то и сам кортеж, содержащий список, становится нехешируемым. Поэтому такой кортеж не может быть использован в качестве ключа в словаре, так как ключи должны быть хешируемыми.
# Пример использования кортежа в качестве ключа словаря
my_dict = {(1, 2): 'значение'}
print(my_dict[(1, 2)]) # 'значение'
# Нехешируемый объект в кортеже
my_dict = {([1, 2], 3): 'значение'} # Ошибка TypeError
Если необходимо использовать изменяемые объекты в качестве ключей словаря, можно воспользоваться другим типом данных, например, использовать словарь в качестве ключа. В этом случае необходимо быть осторожным при изменении значений ключа в словаре, чтобы не нарушить его уникальность и хешируемость.
Итак, для того, чтобы объект мог быть ключом словаря в Python, он должен быть хешируемым, то есть иметь неизменяемое состояние. При использовании кортежей в качестве ключей, убедитесь, что все элементы кортежа также являются хешируемыми объектами, чтобы избежать ошибок при работе со словарем.
Другие уроки курса "Python"
- Тип CodeType в Python.
- Метод get() для словарей
- Работа с итераторами через срезы
- Копирование объектов в Python
- Метод rrshift для пользовательских объектов
- Логирование с Logzero
- Работа с кортежами в Python
- Деление в Python
- Необязательные аргументы в Python
- Метод rxor для операции побитового исключающего «или»
- Комментарии в Python
- Распаковка значений в Python
- Метод rsub в Python: расширение функциональности вычитания
- Python: отличительная особенность — отступы
- Работа со списками
- Множественное назначение в Python
- Метод __ixor__ для побитового исключающего ИЛИ
- Оптимизация поиска в словарях
- Применение команды break
- Создание словаря и множества
- Повторение и перенос строки
- Метод remove() для удаления элемента из списка
- Оператор «not» в Python
- Импорт классов из другого файла
- Оператор match в Python
- Декоратор Property в Python
- Управление памятью в Python
- Counter() — подсчет элементов
- Создание лямбда-функций
- Непрерывная проверка в Python
- Работа с коллекциями Python
- Управление контекстом с помощью декоратора contextmanager
- Названия столбцов в Python таблицах
- Функция product() из itertools
- Встраивание HTML в Jupyter Notebook
- Синхронизация потоков с time.sleep()
- Динамическая типизация в Python
- Форматирование чисел в Python
- Импорт модулей в Python 3.12
- Обратное распространение ошибки
- Приоритет операций в Python
- Многоточие в Python
- Шаблоны Flask: условия и циклы
- Форматирование строк в Python
- Структурирование данных с Pydantic
- Избегайте пустого списка
- None в Python: использование и особенности















