Ваш код должен работать для четного числа элементов в списке, но если у вас нечетное количество элементов, элемент с индексом i+1
не существует, следовательно, ошибка.
Вы также можете zip
через тот же итератор, чтобы использовать последовательные значения в виде пар, с пониманием dict:
In [239]: lst = [1, 2, 3, 4, 5, 6]
In [240]: {k: v for k, v in zip(*[iter(l)] * 2)}
Out[240]: {1: 2, 3: 4, 5: 6}
Для нечетного числа элементов вы можете использовать itertools.zip_longest
с fillvalue
для заполнения пропущенного последнего значения:
In [241]: lst = [1, 2, 3, 4, 5, 6, 7]
In [242]: {k: v for k, v in itertools.zip_longest(*[iter(l)] * 2, fillvalue=None)}
Out[242]: {1: 2, 3: 4, 5: 6, 7: None}