Вы начинающий разработчик Python и столкнулись со страшным сообщением об ошибке «TypeError: Unhashable Type ‘List’»? Не волнуйся; ты не один! Эта статья в блоге расскажет вам об этой распространенной ошибке Python, объяснит, что она означает, и предоставит вам различные методы ее преодоления. Итак, давайте углубимся и раз и навсегда разоблачим эту ошибку!
Чтобы понять ошибку, мы должны сначала понять концепцию хешируемости в Python. В Python хешируемость — это свойство объекта, которое позволяет использовать его в качестве ключа в словаре или элемента в наборе. Хешируемые объекты являются неизменяемыми, то есть их нельзя изменить после создания. Примеры хешируемых типов в Python включают строки, числа и кортежи.
Однако списки, являющиеся изменяемыми объектами, по умолчанию не подлежат хешированию. Это означает, что вы не можете использовать список как ключ в словаре или как элемент набора. Когда вы пытаетесь это сделать, Python выдает сообщение «TypeError: Unhashable Type ‘List’», чтобы указать на проблему.
Теперь, когда мы поняли причину ошибки, давайте рассмотрим некоторые возможные решения:
-
Преобразование списка в кортеж.
Поскольку кортежи являются неизменяемыми и хэшируемыми, преобразование списка в кортеж позволяет использовать его в качестве ключа словаря или элемента набора. Вот пример:my_list = [1, 2, 3] my_tuple = tuple(my_list) -
Используйте замороженные наборы:
Подобно кортежам, замороженные наборы являются неизменяемыми и хэшируемыми. Если ваш список содержит только хешируемые элементы, вы можете преобразовать его в замороженный набор. Вот пример:my_list = [1, 2, 3] my_frozenset = frozenset(my_list) -
Создавайте собственные хешируемые объекты.
Если вам нужно сохранить изменяемый характер списка, но при этом вы хотите использовать его в качестве ключа, вы можете создать собственный хешируемый объект. Это включает реализацию методов__hash__()и__eq__(). Вот пример:class CustomObject: def __init__(self, my_list): self.my_list = my_list def __hash__(self): return hash(tuple(self.my_list)) def __eq__(self, other): return self.my_list == other.my_list my_list = [1, 2, 3] custom_obj = CustomObject(my_list) -
Пересмотрите свой дизайн.
Иногда появление ошибки «TypeError: Unhashable Type ‘List’» может быть признаком дефектного дизайна. Подумайте, действительно ли необходимо использовать список в качестве ключа или элемента набора. Возможно, существует альтернативная структура данных, которая лучше соответствует вашим потребностям.
Используя эти методы, вы можете эффективно преодолеть ошибку «TypeError: Unhashable Type ‘List’» и продолжить свой путь разработки Python.
В заключение, ошибку «TypeError: Unhashable Type ‘List’» можно устранить, преобразовав список в кортеж, используя замороженные наборы, создав собственные хешируемые объекты или переоценив свой дизайн. Понимание хешируемости в Python имеет решающее значение для эффективной работы со словарями и наборами.
Не позволяйте ошибке «TypeError: Unhashable Type ‘List’» обескуражить вас. Воспринимайте это как возможность расширить свои знания Python и улучшить свои навыки решения проблем!