list of dictionaries search using kwargs

Matt Wheeler m at funkyhat.org
Mon Dec 7 17:42:30 EST 2020


for item in self.data:
    if all(item[k] == v for k,v in kwargs.items()):
        return item

Or

return [item for item in self.data if all(item[k] == v for k,v in kwargs.items())]

to return all matches

Beware though that either of these will be slow if your list of dicts is large.
If the list is large enough that this becomes slow, consider using a database (e.g. sqlite or other SQL DB) instead.
On 7 Dec 2020, 22:06 +0000, Larry Martell <larry.martell at gmail.com>, wrote:
> I have a class that has an object that contains a list of dicts. I
> want to have a class method that takes a variable number of key/value
> pairs and searches the list and returns the item that matches the
> arguments.
>
> If I know the key value pairs I can do something like this:
>
> instance = next(item for item in data] if\
> item["appCode"] == 1 and\
> item["componentCode"] == "DB" and\
> item["environmentEnumID"] == 12 and\
> item["serverName"] == 'foo', None)
>
> But in my class method if I have:
>
> def find_data_row(self, **kwargs):
>
> and I call it:
>
> find_data_row(appCode=1, componentCode='DB', ...)
>
> How can I do the search in a pythonic way?
> --
> https://mail.python.org/mailman/listinfo/python-list


More information about the Python-list mailing list