Ошибка распаковки Python 2.7

92
12

Я получаю сообщение об ошибке

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

спросил(а) 2021-01-19T11:53:57+03:00 9 месяцев, 1 неделя назад
1
Решение
120

Вы должны исправить свой код:

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

или как вам угодно. Все, что вам нужно, это правильно распаковать ваши переменные.

ответил(а) 2021-01-19T11:53:57+03:00 9 месяцев, 1 неделя назад
-5

Распаковка, которую вы делаете, не работает так, как вы ожидаете. Когда вы говорите 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}

ответил(а) 2021-01-19T11:53:57+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема