Я заинтересован в том, чтобы взять произвольный диктофон и скопировать его в новый дик, мутируя его по пути.Задание «hashable» о значении Python
Одна мутация, которую я хотел бы сделать, это замена ключей и значений. К сожалению, некоторые ценности сами по себе являются диктофонами. Тем не менее, это генерирует ошибку «unhashable type: 'dict». На самом деле, я не против просто подчеркивать значение и давать ему ключ. Но, я хотел бы быть в состоянии сделать что-то вроде этого:
for key in olddict:
if hashable(olddict[key]):
newdict[olddict[key]] = key
else
newdict[str(olddict[key])] = key
Есть чистый способ сделать это, что не вовлекают улавливать исключение и разбор строки сообщения для «unhashable типа» ?
Это работает, если кортеж содержит список/словарь? –
Нет, и это то, что вы можете определить только во время выполнения, так как до этого содержимое списка вообще неизвестно. 'hash (([],))' дает 'TypeError: unhashable type: 'list'' – Syncopated
Небольшое предупреждение для людей, использующих Python 2.7' isinstance (bytearray ([0xa]), collections.Hashable)) 'возвращает' True', но 'hash (bytearray ([0xa]))' fail с 'TypeError: unhashable type: 'bytearray''. – RedX