TypeError: unhashable type: 'list', но я использую строку в качестве индекса? - PullRequest
0 голосов
/ 07 мая 2020

У меня эта ошибка:

Traceback (most recent call last):
  File (...)
    edge = random.choice(graph[node])
TypeError: unhashable type: 'list'

Мой код выглядит следующим образом:

print(graph) # {'0': ['3'], 
             # '1': ['0'], 
             # '2': ['1', '6'], 
             # '3': ['2'], 
             # '4': ['2'], 
             # '5': ['4'], 
             # '6': ['5', '8'], 
             # '7': ['9'], 
             # '8': ['7'], 
             # '9': ['6']}

visited = {}

node = random.choice(list(graph.keys()))
print(node) # '9' for example
# edge = random.choice(graph[node]) ---> this prints ['6'] but fails inside the loop
while True:
    edge = random.choice(graph[node]) # this is where it breaks

    if node not in visited:
        visited[node] = [edge]
    else:
        if visited[node] == edge:
            break
        else:
            visited[node].append(edge)

        if visited[node]==graph[node]:
            break

    node = graph[edge]

print(visited)

Я просмотрел другие ответы, и все они пытаются проиндексировать dict со списком, но node - строка, которая должна работать. Код прямо над l oop работает, и я даже пробовал с другим условием l oop. Я пытаюсь получить случайный ключ, а затем получить его значение (пытаюсь случайным образом пройти по ориентированному графику). Спасибо!

1 Ответ

1 голос
/ 07 мая 2020

Node - это строка на первой итерации вашего while l oop, но внизу у вас есть:

node = graph[edge]

Теперь это список, поэтому вы фактически получаете ваша ошибка на второй итерации l oop.

...