Автор оригинала: Team Python Pool.
Как решить ошибку “unhashable type: list” в Python
Привет гики и добро пожаловать. В этой статье мы рассмотрим ошибку “unhashable type: list.” С этой ошибкой мы сталкиваемся при написании кода на Python. В этой статье наша главная цель – рассмотреть эту ошибку и устранить её. Всего этого мы добьемся на нескольких примерах. Но сначала давайте попробуем получить краткий обзор того, почему она возникает.
Словари Python принимают в качестве ключа только хэшируемые типы данных. Это означает что значения этих типов остаются неизменными в течение всего их времени жизни. Но когда мы используем тип данных list, который не является хэшируемым, мы получаем такую ошибку.
Ошибка “unhashable type: list”
В этом разделе мы рассмотрим причину, из-за которой возникает эта ошибка. Мы учтем все, что обсуждалось до сих пор. Давайте рассмотрим это на примере:
numb ={1: 'one', [2,10]: 'two and ten', 11: 'eleven'} print(numb)
Выход:
TypeError: unhashable type: 'list'
Выше мы рассмотрели простой пример. Мы создали числовой словарь, а затем попытались распечатать его. Но вместо вывода мы получаем ошибку, потому что использовали в нем тип list в качестве ключа. В следующем разделе мы рассмотрим, как устранить эту ошибку.
Но прежде давайте рассмотрим еще один пример.
country=[{ "name": "India", [28,7]: "states and area", "name": "France", [27,48]: "states and area" }] print(country)
TypeError: unhashable type: 'list'
В приведенном выше примере мы сталкиваемся всё с той же проблемой. В этом словаре мы взяли в качестве данных количество государств и их рейтинг по всему миру. Теперь давайте быстро перейдем к следующему разделу и устраним эти ошибки.
Устранение ошибки “unhashable type:list”
В этом разделе мы постараемся избавиться от ошибки. Давайте начнем с первого примера. Чтобы исправить все это, мы должны использовать кортеж.
numb ={1: 'one', tuple([2,10]): 'two and ten', 11: 'eleven'} print(numb)
{1: 'one', (2, 10): 'two and ten', 11: 'eleven'}
С помощью всего лишь небольшого изменения кода мы можем исправить ошибку. Здесь мы использовали кортеж, который является неизменяемым (hashable) типом данных. Аналогично мы можем исправить ошибку во втором примере.
country=[{ "name": "India", tuple([28,7]): "states and area", "name": "France", tuple([27,48]): "states and area" }] print(country)
[{'name': 'France', (28, 7): 'states and area', (27, 48): 'states and area'}]
Опять же с помощью кортежа мы можем всё исправить. Это простая ошибка, и ее легко исправить.
Разница между hashable и unhashable типами данных
В этом разделе мы видим основное различие между двумя типами. Кроме того, мы классифицируем различные типы данных, которые мы используем при кодировании на python, под этими 2 типами.
В этом разделе мы видим основное различие между двумя типами данных. Кроме того, мы классифицируем различные типы данных, которые мы используем при кодировании в Python под этими двумя типами.
Хэшируемые | Нехэшируемые |
Для этого типа данных значение остается постоянным на всем протяжении жизни объекта. | Для этого типа данных значение не является постоянным и изменяется по месту. |
Типы данных, подпадающие под эту категорию: int, float, tuple, bool, string, bytes. | Типы данных, подпадающие под эту категорию: list, set, dict, bytearray. |
Заключение
В этой статье мы рассмотрели ошибку unhashable type: list. Мы рассмотрели, почему она возникает, и методы, с помощью которых мы можем её исправить. Чтобы разобраться в этом, мы рассмотрели несколько примеров. В конце концов, мы можем сделать вывод, что эта ошибка возникает, когда мы используем нехэшируемый (изменяемый) тип данных в словаре.