Благодаря пониманию, предоставленному Джоном Кугельманом, я смог выяснить проблему и решение, которое я хотел.
Рабочий код из for
l oop:
k, v = item.split(':')
Разбивка:
item.split(':') == 'name:80'.split(':') == 'name', '80'
k, v = 'name', '80'
k == 'name' and v == 80
нерабочий код в list-comp
:
for (k, v) in item.split(':')
Разбивка:
item.split(':') == 'name:80'.split(':') == 'name', '80'
for (k, v) in ('name', '80')
И есть проблема: in
отличается от =
. in
перебирает свои аргументы, возвращая по одному за раз, поэтому:
k, v = 'n', 'a', 'm', 'e'
- это то, что предпринимается, и поскольку четыре элемента пытаются объединить в два, мы получаем ValueError: too many values to unpack
исключение.
Простое решение заключается в инкапсуляции item.split()
в собственный набор:
for k, v in (item.split(':'), )
, который становится
for k, v in (('name', '80'), )
, и поскольку первый элемент в кортеже является кортежем, мы получаем
k, v = 'name', '80'
для первого (и только) итерация второй for
l oop
и проблема решена без вложения еще одной list-comp
в первичную list-comp
.
Финальную , работает list-comp
:
[
(k, int(v))
for item in wrap
for (k, v) in (item.split(':'), )
]