Неполный тип: «список» в словаре - PullRequest
2 голосов
/ 08 апреля 2019

Я написал некоторый код, чтобы несколько раз получить новые значения из второго словаря и добавить в новый словарь.

Это два словаря:

a = {armani: jeans, dolce: gabbana}
b = {jeans: robo, jobs: versace}

Это код: {k:b[v] for k,v in a.items() if v in b}

Однако я получаю следующую ошибку: unhashable type: 'list' Я понимаю, что это может быть потому, что мои значения для b[v] похожи на [[20], [30], [35]]

Моя голова сходит с умаза последние несколько часов.Я уверен, что это что-то такое маленькое

1 Ответ

2 голосов
/ 08 апреля 2019

Это не что-то такое маленькое.Вы должны понять некоторые концепции, прежде чем продолжить свой процесс.

Словари позволяют вам получать доступ к их значениям с помощью ключей, таких как строки или целые числа, а не индексов (например, списков), верно?Что ж, за завесами должен быть механизм, позволяющий это осуществить, который называется хешем.

Каждый раз, когда вы помещаете пару ключ: значение в словарь, для этого ключа вычисляется значение хеша.В случае неизменяемых объектов (объектов, которые нельзя изменить после создания, которые можно создать только заново), значение хеш-функции всегда одинаково для одной и той же строки или целого числа или других неизменяемых объектов, так словарь получает доступ к своим значениям с помощью ключа.

С другой стороны, изменяемые объекты не могут быть хэшированы.Поэтому не подходит для использования в качестве ключа внутри словаря.И list является одним из них.

Если необходимо, вы можете преобразовать список в кортеж, чтобы использовать его в словаре в качестве ключа.

lst = [1, 2, 3]
tup = tuple(lst)

Имейте в виду, чтоВы не можете изменить элементы кортежа после создания, такие как;

tup[0] = 1

Именно поэтому он является неизменным.Вы можете заменить его только на другой кортеж, если вам требуется изменить его значения.

Примечание: Кортеж также не может содержать списки в качестве элементов, если его необходимо использовать дляхеширование (что сделает его изменчивым).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...