Если L
- ваш первоначальный список, вы можете использовать zip(*[iter(L)]*2)
, чтобы группировать предметы в парах. dict constructor может занять Iterable таких пар непосредственно
>>> L = ['name1', 'value1', 'name2', 'value2', 'name3', 'value3']
>>> dict(zip(*[iter(L)]*2))
{'name1': 'value1', 'name2': 'value2', 'name3': 'value3'}
Я не уверен, что вы имеете в виду проще (проще понять?). Трудно догадаться, что вы думаете, что это проще, поскольку я не знаю, на каком уровне вы находитесь. Вот путь без использования iter
или zip
. Если вы не знаете, что делает enumerate
, вы должны посмотреть его.
>>> d = {}
>>> for i, item in enumerate(L):
... if i % 2 == 0:
... key = item
... else:
... d[key] = item
...
>>> d
{'name1': 'value1', 'name2': 'value2', 'name3': 'value3'}
Спасибо. Было бы немного проще, если бы было известно, сколько пар ключей/значений было? –
@JoshuaGilman, Знать длину на самом деле не помогает. Я добавил еще один (длинный) путь к моему ответу. Это то, что вы имеете в виду? –
Разве это не зависит от внутренней реализации zip? i.e, что он пытается прочитать один элемент за раз от каждого итератора вместо того, чтобы получать первый и второй список с нетерпением? – Maxaon3000