Frage

Meine Datenbank gibt derzeit eine Liste von dicts:

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

Wie kann ich leicht überprüfen, ob eine bestimmte ID in dieser Liste enthalten ist oder nicht?

Danke.

War es hilfreich?

Lösung

Wenn Sie ein Wörterbuch Ihrer Suche id machen,

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'

Andere Tipps

Hier ist ein Einzeiler:

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

Nicht sehr effizient though.

Bearbeiten - Ein besserer Ansatz könnte sein:

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

Auf diese Weise wird die Liste nicht vorher in voller Länge erzeugt werden.

  

Wie kann ich leicht überprüfen, ob eine bestimmte ID in dieser Liste enthalten ist oder nicht?

Machen Sie einen Satz

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

nicht fragen, ob dies „effizient“ oder „best“. Es geht um den Standard-Kompromiss.

die eingestellte Aufbau braucht Zeit. Aber die Suche ist dann sofort.

  • Wenn Sie eine Menge von Lookups tun, die Kosten für die Menge des Gebäudes ist über jeden Nachschlag abgeschrieben.

  • Wenn Sie einige Lookups, die Kosten für den Satz von Aufbau kann höher sein als etwas ilike {'id':some_value} in id_list.

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

. . . kehrt boolean. Effizienz? Siehe S. Lott Antwort

Sie können es flach mit einer Liste Verständnis und die Nutzung in:

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

Sie können auch Generator Ausdrücke verwenden, die unterschiedliche Leistungsmerkmale aufweisen (und wird weniger Speicher verwenden, wenn Ihre Liste ist riesig):

id in (d['id'] for d in id_list)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top