2016-10-30 3 views
0

у меня есть два списка dictionaires CURSOR1 и CURSOR2Python присоединиться два списка словарей

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) 

Например:

курсор 1 = [{OrderID: 001, create_time: 10251200}, {OrderID: 002 , create_time: 10232032}]

курсора 2 = [{OrderID: 002, полная стоимость: 300}, {OrderID: 003, полная стоимость: 400}]

ожидаемый результат: [{OrderID: 001, create_time : 10251200, общая стоимость: 300}]

Как объединить каждый словарь в курсор1 с соответствующим словарем в курсоре2 с помощью общего ключа (orderid)?

Я знаю, что мы можем использовать «join» в команде SQL query, но время работы слишком длинное, но не эффективное. Есть ли способ python сделать это?

+0

Питон время работы не будет * лучше *. Вам нужно будет создать индекс в Python значений 'orderid' в первом наборе строк, а затем использовать этот индекс для« объединения »двух наборов строк. Это именно то, что делает ваша база данных, только она уже имеет этот индекс. –

ответ

0

Вы можете использовать двойной цикл:

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) 
Смежные вопросы