У меня есть следующий список:
dummyData =[
{'ticker':'AAPL', 'side':'Buy', 'signal_1':211.12, 'signal_2':0, 'signal_3':0, 'last':200.12},
{'ticker':'AAPL', 'side':'Buy', 'signal_1':0, 'signal_2':0, 'signal_3':211.12, 'last':200.12},
{'ticker':'NFLX', 'side':'Sell', 'signal_1':411.12, 'signal_2':0, 'signal_3':0, 'last':455.02},
{'ticker':'SPY', 'side':'Buy', 'signal_1':0, 'signal_2':211.12, 'signal_3':0, 'last':259.55},
{'ticker':'MSFT', 'side':'Sell', 'signal_1':160.33, 'signal_2':0, 'signal_3':0, 'last':110.14},
{'ticker':'MSFT', 'side':'Sell', 'signal_1':0, 'signal_2':161.71, 'signal_3':0, 'last':110.14},
{'ticker':'MSFT', 'side':'Sell', 'signal_1':0, 'signal_2':0, 'signal_3':170, 'last':110.14},
{'ticker':'SPY', 'side':'Sell', 'signal_1':300, 'signal_2':0, 'signal_3':0, 'last':259.55},
]
Цель - объединить элементы с одинаковыми ticker
и side
. Результирующий список должен выглядеть следующим образом:
resultData =[
{'ticker':'AAPL', 'side':'Buy', 'signal_1':211.12, 'signal_2':0, 'signal_3':211.12, 'last':200.12},
{'ticker':'NFLX', 'side':'Sell', 'signal_1':411.12, 'signal_2':0, 'signal_3':0, 'last':455.02},
{'ticker':'SPY', 'side':'Buy', 'signal_1':0, 'signal_2':211.12, 'signal_3':0, 'last':259.55},
{'ticker':'MSFT', 'side':'Sell', 'signal_1':160.33, 'signal_2':161.71, 'signal_3':170, 'last':110.14},
{'ticker':'SPY', 'side':'Sell', 'signal_1':300, 'signal_2':0, 'signal_3':0, 'last':259.55},
]
Объяснение:
- Первые 2 строки объединены в 1. Обе имеют одинаковый тикер
AAPL
и одну и ту же сторону Buy
. - Строка с тикером
NFLX
остается без изменений. Нет другого ряда с таким же тикером и той же стороной - Четвертый ряд с
SPY
в качестве тикера и Buy
в качестве стороны остается без изменений. Последний ряд имеет тот же тикер, но разную сторону - 3 строки с
MSFT
при тикере объединяются в один. Все 3 строки имеют одинаковый тикер MSFT
и одну и ту же сторону Sell
Как видно, объединенные строки содержат одинаковый тикер, боковое и последнее поля. Если одна строка имеет signal_1 = 100, а другая строка - signal_1 = 0, объединенная строка приведет к signal_1 = 100. Если обе строки имеют signal_1 = 0, объединенное поле останется без изменений.
Тикер сбоку и последние поля остаются прежними. Изменяются только поля сигнала.
Каков наиболее эффективный способ сделать это?