Ошибка распаковки Python 2.7
Я получаю сообщение об ошибке
badfilesdic = {k: v для k, v в badfilelist} ValueError: требуется больше, чем 1 значение для распаковки
Я не знаю, как это исправить!
this is the code:
def badfiles(hasheddic, filesavedin ):
print hasheddic
print '\n'
print filesavedin
badfilelist = [s.split(' : ') for s in hasheddic]
badcontentlist = [s.split(' : ') for s in filesavedin]
badfilesdic = {k: v for k, v in badfilelist}
badcontentdic = {k: v for v, k in badcontentlist}
match = ""
for hashval, filename in badcontentdic.iteritems():
if filename in badfilesdic:
match += (hashval + " File Extension: " + badfilelist[filename]) + "\n"
return match
Вы должны исправить свой код:
badfilelist = [s.split(':') for s in hasheddic]
тогда
badfilesdic = dict(badfilelist) # if you want to have a unique dict
или же
badfilesdic = [{k:v} for k, v in badfilelist] # if you want to have a list of dicts
возможно:
badfilesdic = tuple({k:v} for k, v in badfilelist) # if you want to have a tuple of dicts
или как вам угодно. Все, что вам нужно, это правильно распаковать ваши переменные.
Распаковка, которую вы делаете, не работает так, как вы ожидаете. Когда вы говорите k: v for k, v in hasheddic
вы объявляете кортеж из двух элементов (k,v)
из каждого элемента в hasheddic
. Если какая-либо из строк превышает длину 2, вы получаете ошибку распаковки.
Например:
s = "hi hi".split()
for a, b in s:
print a
print b
Возвращает
h
i
h
i
Если строка была, например, "foo bar", вы получите ошибку распаковки для "foo" и "bar".
Если вы уверены, что ваша строка ввода хорошо отформатирована (split
всегда возвращает 2-элементные списки), вы можете сделать это вместо этого:
{x[0]: x[1] for x in badfilelist}