TypeError: unhashable type: ‘list’ при получении значения из словаря по ключу

1.01K просмотра
0
0 Комментариев

Существует словарь, где ключ — это строка, а значение — это список списков.
Вот пример:

'INMARSAT': [['IH0', 'N', 'M', 'AA1', 'R', 'S', 'AE1', 'T']]

При попытке создать новый словарь, ключом которого будет длина ключа предыдущего словаря, а значением — множество кортежа (ключ и значение предыдущего словаря).
Пример:

1:{('INMARSAT',['IH0', 'N', 'M', 'AA1', 'R', 'S', 'AE1', 'T'])}

При таком коде:

        for items in dictionary:
        result_else[len(dictionary[items])] = set(tuple((str(items), dictionary[items])))

Выдает ошибку

Traceback (most recent call last):
File "/Users/rostykpopov/Documents/ucu/dict_task.py", line 49, in <module>
print(dict_invert(dict_reader_tuple('cmudict.txt')))
File "/Users/rostykpopov/Documents/ucu/dict_task.py", line 41, in      dict_invert
result_else[len(result[items])] = set(tuple((str(items), result[items])))
TypeError: unhashable type: 'list'

Что не так?


Добавить комментарий

3 Answers

Python Опубликовано 22.09.2019
0

The hash() is a built-in python method, used to return a unique number . This can be applied to any user-defined object which won’t get changed once initialized. This property is used mainly in dictionary keys .

TypeError: unhashable type: ‘list’ usually means that you are trying to use a list as an hash argument. This means that when you try to hash an unhashable object it will result an error. For ex. when you use a list as a key in the dictionary , this cannot be done because lists can’t be hashed. The standard way to solve this issue is to cast a list to a tuple .

Добавить комментарий
0

В set не могут находиться изменяемые елементы(list например), так что значением — множество кортежа (ключ и значение предыдущего словаря)» не выполнимо.

Но можно так:

for key, value in dictionary.items():
    result_else[len(value)] = (key, value)

То есть просто кортеж, а не множество. Если хотите множество, то надо свой класс list или set делать.

Добавить комментарий
0

Code:

dictionary = {'INMARSAT': [['IH0', 'N', 'M', 'AA1', 'R', 'S', 'AE1', 'T']]}
result_else = dict()
 
for items in dictionary:
    result_else[len(items)] = dictionary
 
print(result_else)

Result:

{8: {'INMARSAT': [['IH0', 'N', 'M', 'AA1', 'R', 'S', 'AE1', 'T']]}}

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up

Подпишись на канал!

Новые видеоуроки, книги и полезные статьи для python программистов!