有一个字典,
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
是错误的。我不知道为什么。
答案 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]