如何将 Python 列表理解与条件表达式结合使用

Jih*_*aek 5 python list-comprehension conditional-statements

有一个字典,

dlist = [{'Bilbo' : 'Ian', 'Frodo' : 'Elijah'}, {'Bilbo' : 'Martin', 'Thorin' : 'Richard'}]
Run Code Online (Sandbox Code Playgroud)

然后让k = 'Frodo'

我想提取k对应的值(当它存在时)并制作一个列表。

我写

value_list = [dlist[i][k] for i in range(len(dlist)) if k in dlist[i] else "NOT PRESENT"]. 
Run Code Online (Sandbox Code Playgroud)

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

Ana*_*mar 7

当您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']
Run Code Online (Sandbox Code Playgroud)


Dun*_*can 6

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

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

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

value_list = [d.get(k, "NOT PRESENT") for d in dlist]
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢if

value_list = [d[k] if k in d else "NOT PRESENT" for d in dlist]
Run Code Online (Sandbox Code Playgroud)