ключи dict должны быть хешируемыми , эти списки не являются изменяемыми . Вы можете изменить список после того, как составите его. Подумайте, насколько сложно было бы попытаться сохранить диктовку при изменении данных, используемых в качестве ключей; в этом нет никакого смысла. Представьте себе этот сценарий
>>> foo = [1, 2]
>>> bar = {foo: 3}
>>> foo.append(4)
, и вы поймете, почему Python не пытается поддерживать списки в качестве ключей.
Наиболее очевидное решение - использовать в качестве ключей кортежи вместо списков.
>>> d = {[1, 2, 3]: 1, [2, 3]: 3}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> d = {(1, 2, 3): 1, (2, 3): 3}
>>> d
{(2, 3): 3, (1, 2, 3): 1}
>>> d[2, 3]
3
Ключи словаря могут быть только хешируемыми объектами. Если вам нужен контент списка в качестве ключа, вы можете преобразовать список в кортеж.
>>>d={}
>>>a = tuple((1,2))
>>>a
(1, 2)
>>>d[a] = 3
>>>print d
{(1, 2): 3}