2016-10-30 2 views
0

ich zwei Listen von dictionaires Cursor1 haben und Cursor2Python kommen zwei Listen von Wörter

cursor1=conn.cursor(DictCursor) 
query1= "SELECT orderid, create_time FROM order_viw_sgd_00000001 " 
rows=cursor1.execute(query1) 

cursor2=conn.cursor(DictCursor) 
query2= "SELECT orderid, total_price FROM order_viw_sgd_00000001 " 
rows=cursor2.execute(query2) 

Zum Beispiel:

Cursor 1 = [{orderid: 001, create_time: 10251200}, {orderid: 002 , create_time: 10232032}]

Cursor 2 = [{orderid: 002, Gesamtpreis: 300}, {orderid: 003, Gesamtpreis: 400}]

erwartetes Ergebnis: [{orderid: 001, create_time : 10251200, Gesamtpreis: 300}]

Wie verbinde ich jedes Wörterbuch in cursor1 mit dem entsprechenden Wörterbuch in cursor2 mit common key (orderid)?

Ich weiß, wir können "Join" im SQL-Abfragebefehl verwenden, aber die Laufzeit ist zu lang, nicht effizient. Gibt es einen Python-Weg, dies zu tun?

+0

Die Python-Laufzeit gehen wird nicht besser * * werden. Sie müßten in Python einen Index von »orderid« -Werten in der ersten Reihe von Zeilen erzeugen und dann diesen Index verwenden, um die beiden Reihen von Reihen zu verbinden. Das ist genau das, was Ihre Datenbank tut, nur hat sie diesen Index bereits. –

Antwort

0

Sie können Schleife doppelt verwenden:

cursor_1=[ 
    {'orderid':'001', 'create_time':10251200}, 
    {'orderid': '002', 'create_time':10232032} 
] 

cursor_2=[ 
    {'orderid':'002','total_price':300}, 
    {'orderid':'003','total_price':'400'} 
] 

for x, dict1 in enumerate(cursor_1): 
    for y, dict2 in enumerate(cursor_2): 
     if dict1['orderid'] == dict2['orderid']: 
      cursor_1[x].update(dict2) 
      del cursor_2[y] 
      break 
    else: 
     ## (for ... else) : If for loop finished normally (without break). 
     cursor_1.append(dict2) 

print (cursor_1)