установить как ключ словаря - PullRequest
1 голос
/ 27 января 2020

Я запустил приведенную ниже строку кода в Python, но получил ошибку под названием «Ошибка типа: неустранимый тип:« набор »». Я хочу превратить этот ключ в список. Как я могу решить эту ошибку?

dictionary = {
    'a' : [[1,2,3],[4,5,6],[7,8,9]],
    'b' : 2,
    {100} : 3
}
print(dictionary['a'][1][2])

Ответы [ 2 ]

4 голосов
/ 27 января 2020

ключи словаря должны быть хэшируемыми (или лучше: неизменяемыми). set объекты изменяемые (как списки)

вместо них можно использовать frozenset вместо

dictionary = {
    'a' : [[1,2,3],[4,5,6],[7,8,9]],
    'b' : 2,
    frozenset({100}) : 3
}

A frozenset set, который неизменен. Это встроенный тип. Теперь вы можете получить значение, даже передав фрозенцет из списков / кортежей с повторяющимися записями / любым порядком в списке, и он все равно найдет значение

>>> dictionary[frozenset((100,100))]
3
0 голосов
/ 27 января 2020

Вы не можете иметь set в качестве ключа. Ключи должны быть хеш-объектами (вы можете интерпретировать их как неизменяемые). Таким образом, вы можете использовать tuple вместо:

dictionary = {'a': [[1,2,3],[4,5,6],[7,8,9]], 'b': 2, (100,): 3}
...