我正在寻找一种检查列表中是否存在嵌套对象的简单方法。
例如
example_list = [{'id':1, 'name':'k'}, {'id':2, 'name':'y'}, {'id':3, 'name':'z'}]
是否有一个简单的函数可以确定id=3
的词典是否在example_list
?我不想使用循环,因为它似乎有点矫枉过正。
答案 0 :(得分:3)
您可以使用any
和generator 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