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))
Если вы хотите, чтобы это было в одной строке, вам придется обманывать и использовать точку с запятой. ;-)