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

时间:2015-07-15 07:39:43

标签: python list-comprehension conditional-statements

有一个字典,

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是错误的。我不知道为什么。

2 个答案:

答案 0 :(得分:4)

当您在列表推导中有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']

答案 1 :(得分:4)

在列表推导中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]