b = dict(zip(a[::2], a[1::2]))
Если a
оно велико, вы, вероятно, захотите сделать что-то вроде следующего, которое не создает никаких временных списков, как указано выше.
from itertools import izip
i = iter(a)
b = dict(izip(i, i))
В Python 3 вы также можете использовать интеллектуальное понимание, но по иронии судьбы я думаю, что самый простой способ сделать это будет с 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))
Если вы хотите, чтобы это было в одной строке, вам придется обманывать и использовать точку с запятой. ;-)