You could simply define this as a generator:
def find_where(iterable, dct):
for item in iterable:
if all(item[key] == value for key, value in dct.items()):
yield item
my_list = [
{'name': 'Thor', 'age': 23},
{'name': 'Odin', 'age': 42},
{'name': 'Freya', 'age': 50},
{'name': 'Skadi', 'age': 23},
]
print list(find_where(my_list, {'age': 23}))
Output:
[{'age': 23, 'name': 'Thor'}, {'age': 23, 'name': 'Skadi'}]
Also see all()
and list comprehensions for details on the "meat" of the expression.