2015-04-26 3 views
1

У меня есть dict (IDMapping), который я ищу, чтобы получить значение, которое затем я использую для поиска другого dict (defaultFood). У меня проблемы.Unhashable Type: 'list'

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

homePSDpath = os.curdir 
foodName = re.search(r'([a-zA-Z_]+)\\food', homeFoodpath).group(1) 
foodName = foodName.decode("utf-8") 
myFoodKey = IDMapping.get(foodName) 
print defaultFood.get(myFoodKey) 

Это приводит к: TypeError: unhashable типа: «список»

Я попытался преобразование foodName в кортеж перед использованием его для поиска к снимку, но это приводит к ЛОЖНО:

myFoodKey = tuple(myFoodKey) 

Я уверен, что я делаю что-то глупое здесь. Всем спасибо.

+0

Возможный дубликат [Python dictionary: TypeError: unhashable type: 'list'] (http://stackoverflow.com/questions/8532146/python-dictionary-typeerror-unhashable-type-list) – MasterOdin

+0

Что делает 'print (IDMapping.get (foodName)) 'output? Возможно, список списков? –

+0

print (IDMapping.get (foodName)) приводит к выводу из [45] – SuperDougDougy

ответ

4

Вы должны получить доступ к элементу в списке:

print defaultFood.get(myFoodKey[0]) 

т.е. IDMapping.get(foodName) -> [45] так [45][0] -> 45

Если у вас есть обратное отображение Я хотел бы предложить хранение значений IDMapping либо как кортежи, Интс или строки в зависимости от того, что вы хотите с ними сделать, и сделать ключи от defaultFood одинаковыми.

+0

Да, ты прав. Хорошо, чувствую себя немного глупо для этого .. ха-ха! Спасибо! – SuperDougDougy

+0

Не беспокойтесь, используйте кортеж, int и т. Д., Чтобы облегчить жизнь –

0

Это потому, что значения в IDMapping являются списками. Вы не можете использовать список в качестве ключа к словарю (поскольку он изменен). Следовательно, когда вы пытаетесь использовать список в defaultFood.get(myFoodKey), он выдает ошибку, которую вы видите (Unhashable type: list).

Вам нужно каким-то образом преобразовать myFoodKey из списка в строку или целое число или какой-либо другой непеременный тип.

например:

myFoodKey = "".join([str(x) for x in myFoodKey]) 

бы преобразовать список объектов в список строк, а затем соединить их вместе таким образом, что [4, 5] станет "45", который можно использовать в качестве ключа в словаре.

+0

Я искренне ценю Помогите! – SuperDougDougy

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