lst = [{"id": 1, "name": "ernest"}, .... {"id": 16, name:"gellner"}]
for d in lst:
if "id" in d and d["id"] == 16:
return d
我想从列表中提取键“id”等于“16”的字典。
有没有更pythonic的方式呢?
提前致谢
请您参考如下方法:
重复现有答案以摆脱评论:
当您只需要序列中的第一个匹配元素时,请考虑使用生成器表达式:
d16 = (d for d in lst if d.get('id') == 16).next()
您会经常在我的代码中看到这种模式。如果事实证明 lst 中没有任何项目符合条件,这将引发 StopIteration。当预期发生这种情况时,您可以捕获异常:
try:
d16 = (d for d in lst if d.get('id') == 16).next()
except StopIteration:
d16 = None
或者更好的是,将整个事情展开到一个 停止
的 for 循环中for d16 in lst:
if d16.get('id') == 16:
break
else:
d16 = None
(else: 子句仅在 for 循环耗尽其输入时才运行,但如果 for 循环结束则被跳过,因为使用了 break)
