b = dict(zip(a[::2], a[1::2]))
Если a
большое, вы, вероятно, захотите сделать что-то вроде следующего, которое не создает никаких временных списков, как указано выше.
from itertools import izip
i = iter(a)
b = dict(izip(i, i))
В Python 3 вы также можете использовать dict-понимание, но по иронии судьбы я думаю, что самый простой способ сделать это будет с range()
и len()
, что обычно будет запахом кода.
b = {a[i]: a[i+1] for i in range(0, len(a), 2)}
Таким образом, метод iter()/izip()
по-прежнему, вероятно, самый Pythonic в Python 3, хотя, как отмечает EOL в комментарии, zip()
уже ленив в Python 3, поэтому вам не нужен izip()
.
i = iter(a)
b = dict(zip(i, i))
Если вы хотите, чтобы это было в одной строке, вам придется обманывать и использовать точку с запятой. ; -)