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是错误的。我不知道为什么。
当您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)
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)
| 归档时间: |
|
| 查看次数: |
2149 次 |
| 最近记录: |