如何在条件表达式中使用 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]
有字典,
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]