У меня есть произвольный список списков, и моя цель состоит в том, чтобы сгладить этот список, а также получить возвращаемый уровень, с которого я извлек каждый элемент.Я должен сказать, что простые списки содержат кортежи примерно так:
[(13,1), [(12,2), (14,1)], [[(11,2), (5,7)], (8,2)]]
Что я уже сделал, это сгладил этот список с помощью этого рекурсивного метода:
def unpack(x):
if x == []:
return x
if isinstance(x[0], list):
return unpack(x[0]) + unpack(x[1:])
return x[:1] + unpack(x[1:])
Это возвращаетследующее (что вполне нормально для меня):
[(13,1), (12,2), (14,1), (11,2), (5,7), (8,2)]
В итоге я хочу получить:
[{(13,1):1}, {(12,2):2}, {(14,1),2}, {(11,2):3}, {(5,7):3}, {(8,2):2}]
Пока я пробовал это:
def unpack(x,n=0):
if x == []:
return {x:n}
if isinstance(x[0], list):
return unpack(x[0],n+1) + unpack(x[1:],n+1)
return x[:1] + unpack(x[1:],n+1)
Но я получаю сообщение об ошибке: «TypeError: unhashable type: 'list''
У вас есть идеи, как вернуть список словарей?