Question

Ma base de données retourne actuellement une liste de dicts:

id_list = ({'id': '0c871320cf5111df87da000c29196d3d'}, 
           {'id': '2eeeb9f4cf5111df87da000c29196d3d'}, 
           {'id': '3b982384cf5111df87da000c29196d3d'}, 
           {'id': '3f6f3fcecf5111df87da000c29196d3d'}, 
           {'id': '44762370cf5111df87da000c29196d3d'}, 
           {'id': '4ba0d294cf5111df87da000c29196d3d'})

Comment puis-je vérifier facilement si un identifiant donné est dans cette liste ou non?

Merci.

Était-ce utile?

La solution

si vous faites un dictionnaire de votre identifiant de recherche,

search_dic = {'id': '0c871320cf5111df87da000c29196d3d'}

id_list = ({'id': '0c871320cf5111df87da000c29196d3d'}, 
           {'id': '2eeeb9f4cf5111df87da000c29196d3d'}, 
           {'id': '3b982384cf5111df87da000c29196d3d'}, 
           {'id': '3f6f3fcecf5111df87da000c29196d3d'}, 
           {'id': '44762370cf5111df87da000c29196d3d'}, 
           {'id': '4ba0d294cf5111df87da000c29196d3d'})


if search_dic in id_list:
    print 'yes'

Autres conseils

Voici une seule ligne:

if some_id in [d.get('id') for d in id_list]:
    pass

Pas si très efficace.

modifier - Une meilleure approche pourrait être:

if some_id in (d.get('id') for d in id_list):
    pass

De cette façon, la liste est pas générée en pleine longueur d'avance.

  

Comment puis-je vérifier facilement si un identifiant donné est dans cette liste ou non?

Faire un ensemble

keys = set( d['id'] for d in id_list )
if some_value in keys

Ne demandez pas si cela est « efficace » ou « meilleur ». Il implique le compromis standard.

Construire l'ensemble prend du temps. Mais la recherche est alors instantanée.

  • Si vous faites beaucoup de recherches, le coût de la construction de l'ensemble est amorti sur chaque recherche.

  • Si vous faites quelques recherches, le coût de la construction de l'ensemble peut être supérieur à quelque chose iLike {'id':some_value} in id_list.

any(x.get('id')==given_id for x in id_list)

. . . retourne un booléen. Efficacité? Voir la réponse de S. Lott

Vous pouvez l'aplatir avec une compréhension de la liste et l'utilisation dans:

id in [d['id'] for d in id_list]

Vous pouvez également utiliser des expressions de générateur, qui ont des caractéristiques de performance (et utilisera moins de mémoire si votre liste est énorme):

id in (d['id'] for d in id_list)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top