Курс Python → Хешируемые ключи в Python
Для того чтобы понять, как объекты становятся ключами словаря в Python, необходимо разобраться в понятии хеширования. Хеширование — это процесс преобразования данных произвольной длины в строку фиксированной длины. Ключи словаря должны быть хешируемыми, то есть иметь неизменяемое состояние, чтобы быть уникальными и идентифицируемыми при доступе к ним в словаре.
Одним из примеров нехешируемого объекта является кортеж, содержащий в себе неизменяемый объект, например, список. Поскольку список изменяемый, то и сам кортеж, содержащий список, становится нехешируемым. Поэтому такой кортеж не может быть использован в качестве ключа в словаре, так как ключи должны быть хешируемыми.
# Пример использования кортежа в качестве ключа словаря
my_dict = {(1, 2): 'значение'}
print(my_dict[(1, 2)]) # 'значение'
# Нехешируемый объект в кортеже
my_dict = {([1, 2], 3): 'значение'} # Ошибка TypeError
Если необходимо использовать изменяемые объекты в качестве ключей словаря, можно воспользоваться другим типом данных, например, использовать словарь в качестве ключа. В этом случае необходимо быть осторожным при изменении значений ключа в словаре, чтобы не нарушить его уникальность и хешируемость.
Итак, для того, чтобы объект мог быть ключом словаря в Python, он должен быть хешируемым, то есть иметь неизменяемое состояние. При использовании кортежей в качестве ключей, убедитесь, что все элементы кортежа также являются хешируемыми объектами, чтобы избежать ошибок при работе со словарем.
Другие уроки курса "Python"
- Синхронизация доступа к ресурсам
- Хэш-функции и метод цепочек
- Многострочные комментарии в Python
- Магические методы в Python
- Извлечение аудио из видео
- lru_cache оптимизация функций
- Переворот списка в Python
- Конкатенация строк с помощью join()
- Списковое включение в Python
- Concrete Paths — метод .with_suffix()
- Копирование объектов в Python
- Принцип одной функции
- f-строки в формате строк
- Создание обратного итератора
- Операции с матрицами в Python
- Оптимизация памяти с __slots__
- Подсчет элементов в списке с Counter
- Работа с каталогами в Python
- Циклы for в Python
- Профилирование с cProfile
- Работа со временем в Python
- Перезапуск ячейки в Jupyter Notebook с dostoevsky
- Получение значений из словарей
- Фильтрация списка от «ложных» значений
- Создание класса в Python
- Создание виртуальной среды
- Преобразование числа в восьмеричную строку
- Обработка исключений в Python
- Расширение информации об ошибке в Python
- Сортировка списка по индексам
- Копирование объектов в Python
- Руководство по Pymorphy2
- Модуль os: работа с файлами и папками
- Структура данных deque в Python
- Регулярные выражения в Python
- Работа со строками в Python
- Оператор «not» в Python
- Проверка дубликатов в Python
- Списки в Python: основы
- Форматирование данных с pprint
- Метод join() для объединения элементов
- Участие в LP стейкинге Waves
- Присвоение и ссылки
- Определение объема памяти объекта
- Оформление кода на Python
- Переворот строки с использованием цикла
- Импорт с альтернативным именем
- Управление памятью в numpy.















