web-dev-qa-db-fra.com

Le moyen le plus efficace de rechercher dans la liste des textes

J'ai la liste de dicts suivante.

people = [
{'name': "Tom", 'age': 10},
{'name': "Mark", 'age': 5},
{'name': "Pam", 'age': 7}
]

Quel serait le moyen le plus optimisé en termes de performances pour rechercher dans la liste des dictés. Voici différentes méthodes:

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]

Toute autre méthode est également la bienvenue. Merci.

13
Andy M.

Faire un timeit rapide sur les fonctions montre que l'utilisation du filtre semble être la plus rapide de toutes les méthodes

%timeit filter(lambda person: person['name'] == 'Pam', people)

1000000 boucles, meilleur de 3: 263 ns par boucle

  • L'utilisation de next produit un temps de 731ns
  • L'utilisation de la méthode de recherche produit un temps de 361 ns
  • Et enfin le seach_dictionaries utilise 811ns
16
Varun

Si vous recherchez un seul article, c'est la "meilleure" approche

def search(name):
    for p in people:
        if p['name'] == name:
            return p

Toutes les autres implémentations itéreront sur tous les éléments de la liste, tandis que celle-ci s'arrêtera une fois l'élément trouvé

1
Leon