Почему я не могу иметь `else` (из if / else) с выражениями генератора python?

#python #list-comprehension #generator-expression

#python #понимание списка #генератор-выражение

Вопрос:

У меня есть следующий код, который работает нормально:

 incl_list = ['A']
my_list = [{'A': 1, 'B': 'world'}, {'A': 4, 'B': 'hello'}]
result = 'n'.join(','.join(f'{key}={value}' for key, value in record.items() if key in incl_list) for record in my_list)
 

Результат дает:

 'A=1nA=4'
 

Мой вопрос в том, почему я не могу добавить else оператор, например:

 result = 'n'.join(','.join(f'{key}={value}' for key, value in record.items() if key in incl_list) else 'ignore' for record in my_list)
 

похоже на понимание списка?

Ошибка, которую я получаю,:

  File "<ipython-input-276-201c8f88ac13>", line 1
    result = 'n'.join(','.join(f'{key}={value}' for key, value in record.items() if key in incl_list else 'ignore') for record in my_list)
                                                                                                         ^
SyntaxError: invalid syntax
 

Комментарии:

1. Какие-либо возникающие ошибки?

2. Вы можете использовать a if b else c for d in e , а не то, что вы пытались сделать.

3. @zixuan Я обновил его сейчас.

4. @Newskooler Я предлагаю вам внимательно это проверить. Это не то, что вы делаете.

5. @khelwood Вы действительно правы. Прошу прощения за мое замешательство. С таким количеством вложений иногда трудно отслеживать.

Ответ №1:

Ваше else утверждение должно сопровождаться if утверждением при использовании внутри понимания, таким образом, вы можете изменить свой код таким образом, чтобы он работал

 result = 'n'.join(','.join(f'{key}={value}' if key in incl_list else 'ignore' for key, value in record.items()) for record in my_list)