Что такое «Unhashable type»? Пытался сделать одну вещь со словарём — вылезла такая вещь. Но не в этом вопрос. В чем вообще суть этого понятия? Почитал, таковыми являются списки и словари. Хотелось бы немного теории доступным языком Ну, собственно код, где это проявилосьTypeError: unhashable type: 'list'audio = [ {'lyrics_id': 3586866, 'title': 'Fruhling in Paris', 'id': 358450897, 'artist': 'Rammstein', 'owner_id': 358450897}, {'lyrics_id': 3655472, 'title': 'Zwitter', 'id': 358450894, 'artist': 'Rammstein', 'owner_id': 358450897} ] keys_to_delete = ['owner_id', 'duration', 'url', 'lyrics_id', 'album_id', 'genre_id'] for i in range(len(audio)): for j in range(len(keys_to_delete)): if audio[i].get([keys_to_delete[j]]): # есть ли такой ключ в словаре del(audio[i][keys_to_delete[j]])
Unhashable type означает, что нельзя использовать объект в качестве ключа словаря в Python, потому что он не является хешируемым (unhashable). В случае списка и словаря это объясняется тем, что они могут изменяться и, следовательно, не являются хешируемыми, так как хешируемый объект должен быть неизменяемым.
Примерно так можно это представить: хеширование - это процесс, с помощью которого объект превращается в некий уникальный идентификационный номер, который используется для поиска информации. Когда объект хешируется, Python создает специальное значение для этого объекта, которое в дальнейшем можно использовать в качестве ключа для его поиска или доступа.
В вашем коде вы пытаетесь использовать список keys_to_delete в качестве ключа в методе get(), что вызывает ошибку "unhashable type". Вам необходимо использовать просто ключ (keys_to_delete[j]), без квадратных скобок, чтобы получить значение из словаря.
Исправленный фрагмент кода будет выглядеть следующим образом:
audio = [ {'lyrics_id': 3586866, 'title': 'Fruhling in Paris', 'id': 358450897, 'artist': 'Rammstein', 'owner_id': 358450897}, {'lyrics_id': 3655472, 'title': 'Zwitter', 'id': 358450894, 'artist': 'Rammstein', 'owner_id': 358450897} ] keys_to_delete = ['owner_id', 'duration', 'url', 'lyrics_id', 'album_id', 'genre_id'] for i in range(len(audio)): for j in range(len(keys_to_delete)): if audio[i].get(keys_to_delete[j]): # без скобок del(audio[i][keys_to_delete[j]])
Unhashable type означает, что нельзя использовать объект в качестве ключа словаря в Python, потому что он не является хешируемым (unhashable). В случае списка и словаря это объясняется тем, что они могут изменяться и, следовательно, не являются хешируемыми, так как хешируемый объект должен быть неизменяемым.
Примерно так можно это представить: хеширование - это процесс, с помощью которого объект превращается в некий уникальный идентификационный номер, который используется для поиска информации. Когда объект хешируется, Python создает специальное значение для этого объекта, которое в дальнейшем можно использовать в качестве ключа для его поиска или доступа.
В вашем коде вы пытаетесь использовать список keys_to_delete в качестве ключа в методе get(), что вызывает ошибку "unhashable type". Вам необходимо использовать просто ключ (keys_to_delete[j]), без квадратных скобок, чтобы получить значение из словаря.
Исправленный фрагмент кода будет выглядеть следующим образом:
audio = [{'lyrics_id': 3586866, 'title': 'Fruhling in Paris', 'id': 358450897, 'artist': 'Rammstein', 'owner_id': 358450897},
{'lyrics_id': 3655472, 'title': 'Zwitter', 'id': 358450894, 'artist': 'Rammstein', 'owner_id': 358450897}
]
keys_to_delete = ['owner_id', 'duration', 'url', 'lyrics_id', 'album_id', 'genre_id']
for i in range(len(audio)):
for j in range(len(keys_to_delete)):
if audio[i].get(keys_to_delete[j]): # без скобок
del(audio[i][keys_to_delete[j]])
Теперь ваш код должен работать без ошибок.