如何在条件表达式中使用 Python 列表理解

How to use a Python list comprehension with a conditional expression

有字典,

dlist = [{'Bilbo' : 'Ian', 'Frodo' : 'Elijah'}, {'Bilbo' : 'Martin', 'Thorin' : 'Richard'}]

k = 'Frodo'

我想把k对应的值存在的时候提取出来做一个列表。

我写了

value_list = [dlist[i][k] for i in range(len(dlist)) if k in dlist[i] else "NOT PRESENT"]. 

但是电脑说 else 是错误的。不知道为什么。

当列表理解中有 else 部分时,将其放在 for 循环之前,示例 -

value_list = [dlist[i][k] if k in dlist[i] else "NOT PRESENT" for i in range(len(dlist))]
value_list
>>> ['Elijah', 'NOT PRESENT']

if 在列表理解中的 for 之后用于过滤列表:当条件为假时,您根本不会得到任何元素。

if..else 之前的列表理解只是一个三元运算符,与任何其他表达式没有区别。

其他几点:for i in range(len(...)) 在 Python 中几乎总是错误的。如果您只遍历单个列表,只需遍历它即可。 此外,字典有一个方法 .get() 可以用来完全避免 if 。所以:

value_list = [d.get(k, "NOT PRESENT") for d in dlist]

或者如果您更喜欢 if:

value_list = [d[k] if k in d else "NOT PRESENT" for d in dlist]