Предполагая, что целью является создание dict
ключей сопряжения из test_list_k
со значениями из test_list_v
, то, что вы хотите, это zip
(что приведет к удалению непарного ключа) или itertools.zip_longest
(что позволитВы должны указать значение для непарного ключа). Синтаксис его использования:
test_dict_comp = {k: v for k, v in zip(test_list_k, test_list_v)}
или в этом простом случае (когда фильтрация или преобразование не выполняются, поэтому понимание не требуется), вы можете просто передать полученный итератор пар внепосредственно dict
конструктор:
test_dict_comp = dict(zip(test_list_k, test_list_v))
Ваш код ломается, потому что and
предназначен для логических тестов, он не может комбинировать произвольные фрагменты операторов так, как вы пытаетесь. Синтаксический анализатор пытается проанализировать значение для повторения в первом цикле for, и когда он достигает test_list_k and for
, он сбивается с толку (поскольку после test_list_k and
должно следовать другое выражение, чтобы получить другое значение, которое будет проверено на достоверность, еслиtest_list_k
определено как правдивое, а for
является ключевым словом, а не юридическим выражением для правой части and
).