I have the following list of dicts.
people = [
{'name': "Tom", 'age': 10},
{'name': "Mark", 'age': 5},
{'name': "Pam", 'age': 7}
]
Which would be the most optimized way in terms of performance to search in list of dicts. Following are different some methods:
next((item for item in dicts if item["name"] == "Pam"), None)
OR
filter(lambda person: person['name'] == 'Pam', people)
OR
def search(name):
for p in people:
if p['name'] == name:
return p
OR
def search_dictionaries(key, value, list_of_dictionaries):
return [element for element in list_of_dictionaries if element[key] == value]
Any other method is also welcome. Thanks.
Doing a quick timeit on the functions show that using filter seems to be the fastest of all the methods
%timeit filter(lambda person: person['name'] == 'Pam', people)
1000000 loops, best of 3: 263 ns per loop
If you are searching for a single item then this is the "best" approach
def search(name):
for p in people:
if p['name'] == name:
return p
All the other implementations will iterate over all the items in the list, whereas this one will stop once the item is found
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With