Давайте взорвем ваше понимание диктата; это эквивалентно следующему:
test_dict = {}
for key in ['a','b','c']:
for val in range(3):
test_dict[key] = val
Итак, для каждого ключа вы выполняете три разных назначения в своем словаре. Естественно, сохраняется только последний.
Чтобы получить желаемый результат, просто назначьте ho для каждой клавиши один раз. Очевидный способ в этом случае - использовать enumerate()
для нумерации элементов в последовательности, а затем использовать это значение.
test_dict = {key: val for val, key in enumerate(['a','b','c'])}
Для общего случая любых двух последовательностей используйте zip()
:
test_dict = {key: val for key, val in zip(['a', 'b', 'c'], range(3))}
На самом деле, поскольку конструктор dict
рад использовать последовательность пар ключ / значение, вы можете написать это так:
test_dict = dict(zip(['a', 'b', 'c'], range(3)))