确定嵌套对象是否在列表中

时间:2014-12-19 18:12:54

标签: python list dictionary

我正在寻找一种检查列表中是否存在嵌套对象的简单方法。

例如

example_list = [{'id':1, 'name':'k'}, {'id':2, 'name':'y'}, {'id':3, 'name':'z'}]

是否有一个简单的函数可以确定id=3的词典是否在example_list?我不想使用循环,因为它似乎有点矫枉过正。

2 个答案:

答案 0 :(得分:3)

您可以使用anygenerator expression

if any(x['id'] == 3 for x in example_list):

当然,这假设所有词典都有一个id键。如果没有,那么你可以这样做:

if any(x.get('id', 0) == 3 for x in example_list):

<强>更新

要返回字典,请使用next

dct = next((x for x in example_list if x['id'] == 3), None)

如果列表中没有符合条件的字典,则None返回默认值。但是你可以选择你想要的任何其他价值。

答案 1 :(得分:1)

如果你只想要包含id == 3`的第一个字典,请使用常规循环:

for d in example_list:
    if d.get("id") == 3:
        print(d)
        break

如果您想要所有dicts使用列表comp:

[d for  d in example_list if d.get("id") == 3]

您可以使用函数并返回dict:

def get_d(l, key, val):
    for d in l:
        if d.get(key) == val:
            return d