неверный синтаксис при попытке сделать словарь понятным? - PullRequest
0 голосов
/ 24 октября 2019
test_list_k = ['a', 'b', 'c', 'd']

test_list_v = ['f', 'g', 'h']

test_dict_comp = {k: v for k in test_list_k and for v in test_list_v}
print(test_dict_comp)

По какой-то причине секунда в test_dict_comp считается неверным синтаксисом.

1 Ответ

0 голосов
/ 24 октября 2019

Предполагая, что целью является создание 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).

...