2015-11-24 2 views
0

Я продолжаю получать эту ошибку, и я не уверен, почему? благодарит заранее.Ошибка списка Hashable

Traceback (most recent call last): 
    Python Shell, prompt 16, line 4 
builtins.TypeError: unhashable type: 'list' 

мой код выглядит следующим образом: (св Dict в Словаре, но я опустил другие из них, чтобы сделать его более удобным для чтения)

a = {'nich': {'following': ['caleb', 'daven', 'greg', 'bess', 'john']}} 
b = {'search': {'username': 'nich', 'operations': ['following']}} 
username = b['search']['username'] 
operation = b['search']['operations'] 
main_list = [username] 
for op in operation: 
     if op == 'following': 
      for user in main_list: 
       main_list.append(a[user]['following']) 
print(main_list) 

EDIT: печать (main_list) копии & пасты ошибка

+1

Вам не хватает '}' в конце вашей первой строки. – 101

+0

Я предполагаю, что это от редактирования кода до публикации. Недопустимый '}' приведет к синтаксической ошибке, когда он достигнет 'b = ...'. – TigerhawkT3

+0

Пожалуйста, отредактируйте свой код в [MCVE] (http://stackoverflow.com/help/mcve) - это означает, что он должен производить ту же ошибку, которую вы получаете, но все же без включения какого-либо дополнительного кода, который не влияет результаты. – TigerhawkT3

ответ

2

Вы пытаетесь вставить список в другой список здесь:

т.е. a[user]['following'] возвращает список

for user in main_list: 
       main_list.append(a[user]['following']) 

Вместо этого вы должны попробовать сливаясь те список:

   for user in main_list[:]: 
        main_list = main_list + a[user]['following'] 

Iterating a copy of the list may be a good idea for user in main_list[:]:

+0

Благослови вашу душу. – Eyeballmond

+0

буквально выскочил с моего места – Eyeballmond

+0

id 'up' вы, но у меня нет достаточных точек репутации lol – Eyeballmond

1

Словари нужно ключи быть hashable, который по существу означает, что вы можете взять ключ и превратить его в число. Ключ (предназначенный для каламбура) заключается в том, что ключи должны быть неизменяемыми, что означает, что они не могут быть изменены. Если они могут быть изменены, хеш изменится. Списки не хешируются, потому что вы можете их изменить. Это то, что main_list является:

['nich', ['caleb', 'daven', 'greg', 'bess', 'john']] 

Итак, когда вы Переберите в этом списке ...

for user in main_list: 
    main_list.append(a[user]['following']) 

Второй раз через, user список (потому что вы приложили к ['caleb', 'daven', 'greg', 'bess', 'john']main_list). Что не хешируется, поэтому a[user] не удается. Моя догадка является то, что вы хотите расширить список вместо этого, так что цикл должен быть таким:

for user in main_list: 
    main_list.extend(a[user]['following']) 

Либо это, либо использовать другой (первоначально пустой) список вместо main_list.

Смежные вопросы