#python
#python
Вопрос:
Этот код:
testset = list(set(child).union(pot_deck))
раньше работало, создавая testset
список, представляющий собой объединение двух списков child
и pot_deck
. Я изменил что-то, казалось бы, не связанное в коде, и теперь это выходит с
TypeError: unhashable type: 'list'
.
Я пытался
testset = list(set(child).union(set(pot_deck)))
тоже, но с тем же результатом.
Комментарии:
1. содержит ли в них списки
child
илиpot_deck
? обычно ошибка unhashable возникает, когда вы пытаетесь указать, что элемент набора недопустим для помещения в set.2. Выведите
child
иpot_deck
. Похоже, что по крайней мере у одного из них есть список в качестве элемента.3. Спасибо. Вы оба правы. Каким-то образом это стало списком по пути. Мне нужно еще немного поработать над кодом.
Ответ №1:
Убедитесь, что ни в одном из списков, которые вы хотите преобразовать в набор, нет списка. Списки не являются хэшируемыми и, следовательно, не могут быть элементом набора.
Ответ №2:
Списки с простыми примитивными значениями должны быть хэшируемыми, по крайней мере, в Python 3.8 :
In [5]: child = [1]
In [6]: pot_deck = [2]
In [7]: testset = list(set(child).union(pot_deck))
...:
In [8]: testset
Out[8]: [1, 2]
Однако, если у вас есть список списков, вы получите:
In [9]: child = [[1]]
In [10]: testset = list(set(child).union(pot_deck))
...:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-52828817787d> in <module>
----> 1 testset = list(set(child).union(pot_deck))
TypeError: unhashable type: 'list'
Итак, я предполагаю, что это то, что произошло. Вы можете распечатать содержимое в child
и post_deck
и узнать.