2017-06-01 9 views
-2

Ich bin ein wenig verwirrt darüber, wie eine Reihe von Dicts mit einer for-Schleife erstellen und diese Dicts an eine Liste anhängen.Dict mit FOR LOOP

object_1 = dict() 
object_1['ID'] = 1234 
object_1['NAME'] = 'ACB' 
... 
object_2 = dict() 
object_2['ID'] = 123 
object_2['NAME'] = 'ABC' 
... 

object_list = list() 
object_list.append(object_1) 
object_list.append(object_2) 

Ich möchte x dict Objekte zu schaffen, wo x die Anzahl der Zeilen von meiner SELECT ist.

cur = conn.cursor() 
cur.execute("SELECT * FROM account WHERE date=current_date") 
rows = cur.fetchall() 

i=0 
for row in rows: 
... 
#What I thought 
i += 1 
obj_+i = dict() 
obj_+i['ID'] = row[0] 
.... 
.... 
obj_list = list() 
obj_list.append(obj_+i) 
+0

mag, dass Ihr Einzug wirklich aussieht Dies sollte? –

+0

Dies ist nur ein Beispiel:] – TMoraes

+1

Ich denke, Sie würden davon profitieren lesen https://nedbatchelder.com/text/names.html – chepner

Antwort

2

den Job

object_list = [] 
for row in rows: 
    object_list.append({'ID': row[0], 'NAME': row[1]}) 
+0

Es hat funktioniert! Wenn ich jedoch meine Liste drucke, werden die Elemente nicht in der richtigen Reihenfolge angezeigt, zB: "ID", "NAME", "CITY" | "NAME"; "CITY" ... und wie kann ich nur auf "NAME" zugreifen? Objektliste ["NAME"]? – TMoraes

+1

@TMoraes Wörterbücher haben keine Reihenfolge. Sie können ein Listenverständnis verwenden: '[o [" NAME "] für o in object_list]' – Barmar

+0

Sorry, aber wie funktioniert es? – TMoraes

2

Wenn ich Ihre Frage richtig verstanden habe, das den Trick tun sollten:

cur = conn.cursor() 
cur.execute("SELECT * FROM account WHERE date=current_date") 
rows = cur.fetchall() 

obj_list = [] 
for row in rows: 
    d = {} 
    d['ID'] = row[0] 
    ... 
    obj_list.append(d) 
1

Sie können keine String-Verkettung verwenden, um variable Variablennamen zu erstellen so - und Sie brauchen nicht zu, entweder. Sie können den gleichen Variablennamen in der Schleife immer wieder verwenden und das neu erstellte Objekt zur Liste hinzufügen. Durch die Wiederverwendung des gleichen Variablennamens in der nächsten Iteration der Schleife wird das zuvor dieser Variablen zugewiesene Objekt nicht geändert.

Beachten Sie auch, dass Sie die Listeninitialisierung obj_list = list() außerhalb der Schleife verschieben sollten, andernfalls werden Sie die Liste in jeder Iteration zurücksetzen.

Wenn Sie auf die einzelnen Wörterbücher in der Liste nach der Schleife zugreifen möchten, können Sie z. obj_list[0] erhalten obj_1, obj_list[1] für obj_2, und so weiter.