python帮助从列表中提取值

时间:2011-08-04 22:52:03

标签: list dictionary python

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方式吗?

提前致谢

3 个答案:

答案 0 :(得分:4)

对现有答案进行评论,以便退出评论:

当您只需要序列中的第一个匹配元素时,请考虑使用生成器表达式:

d16 = (d for d in lst if d.get('id') == 16).next()

这是您经常在我的代码中看到的模式。如果StopIteration中没有与条件匹配的项目,则会引发lst。当预计会发生这种情况时,您可以捕获异常:

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而结束时会被跳过)

答案 1 :(得分:2)

这样做。它是否“更干净”是个人电话。

d16 = [d for d in lst if d.get('id', 0) == 16][0]

如果没有id为0的字典,则此初始方法将失败。您可以克服这种情况:

d16 = [d for d in lst if d.get('id', 0) == 16]
if d16: d16 = d16[0]

这将防止索引错误,但如果容器中没有符合条件的字典,则d16将为空列表。

答案 2 :(得分:1)

如果找不到,会有一点改善:

d16 = ([d for d in lst if d.get('id', 0) == 16] + [None])[0]