Оптимизировать для циклов для создания списка и словаря
В настоящее время я пытаюсь оптимизировать следующий код, уменьшая циклы for и пытаясь реализовать списки / словарь, код следующим образом:
marketid = (s['marketId'] for s in booksn)
refrunner = {j['selectionId']:[j['runnerName'], i['marketStartTime']] for i in booksn for j in i['runners']}
Теперь у меня проблема в том, что я не уверен, как удалить первый цикл for и интегрировать список "marketid" в словарь "refrunner".
Небольшое отступление к этим переменным заключается в том, что "marketid" используется для отправки списка параметров в веб-API, API требует список.
Словарь "refrunner" необходим, чтобы я мог объединить "runnerName" и "marketStartTime" с выводом ответа API. Ответ API возвращает список словарей, которые, в свою очередь, согласовываются с ключом selectionId из refrunner, так что я могу расширить значения для каждого ключа refrunner.
Во избежание сомнений приведенный ниже фрагмент кода является выдержкой из списка "booksn":
booksn = [{'marketId': '1.130412225', 'runners': [{'runnerName': 'Chirico Vallis', 'handicap': 0.0, 'sortPriority': 1, 'selectionId': 12128886}, {'runnerName': 'Kings War', 'handicap': 0.0, 'sortPriority': 2, 'selectionId': 11835260}, {'runnerName': 'Banjo', 'handicap': 0.0, 'sortPriority': 3, 'selectionId': 11835256}, {'runnerName': 'Jeremys Joy', 'handicap': 0.0, 'sortPriority': 4, 'selectionId': 8534820}, {'runnerName': 'Arena Seven', 'handicap': 0.0, 'sortPriority': 5, 'selectionId': 10950918}, {'runnerName': 'Private Ledger', 'handicap': 0.0, 'sortPriority': 6, 'selectionId': 12716038}, {'runnerName': 'Sir Issac', 'handicap': 0.0, 'sortPriority': 7, 'selectionId': 8930769}, {'runnerName': 'Pats Pearl', 'handicap': 0.0, 'sortPriority': 8, 'selectionId': 11103454}, {'runnerName': 'Dalmarella Dancer', 'handicap': 0.0, 'sortPriority': 9, 'selectionId': 7652544}, {'runnerName': 'Darcy Mcgees', 'handicap': 0.0, 'sortPriority': 10, 'selectionId': 12588978}, {'runnerName': 'Bank Balance', 'handicap': 0.0, 'sortPriority': 11, 'selectionId': 12183394}, {'runnerName': 'Royal Roslea', 'handicap': 0.0, 'sortPriority': 12, 'selectionId': 9069976}, {'runnerName': 'Lowertown Scholar', 'handicap': 0.0, 'sortPriority': 13, 'selectionId': 11385072}], 'totalMatched': 40927.82, 'marketStartTime': datetime.datetime(2017, 3, 19, 14, 40), 'marketName': '2m Mdn Hrd'}, {'marketId': '1.130412675', 'runners': [{'runnerName': 'Spanish Captain', 'handicap': 0.0, 'sortPriority': 1, 'selectionId': 10425181}, {'runnerName': 'Flying Rock', 'handicap': 0.0, 'sortPriority': 2, 'selectionId': 11569368}, {'runnerName': 'Hooponopono', 'handicap': 0.0, 'sortPriority': 3, 'selectionId': 7591031}, {'runnerName': 'Tuscan', 'handicap': 0.0, 'sortPriority': 4, 'selectionId': 6814235}, {'runnerName': 'Elusive Wolf', 'handicap': 0.0, 'sortPriority': 5, 'selectionId': 10589242}, {'runnerName': 'Master Of Mischief', 'handicap': 0.0, 'sortPriority': 6, 'selectionId': 9618022}, {'runnerName': 'Wandies', 'handicap': 0.0, 'sortPriority': 7, 'selectionId': 9121584}, {'runnerName': 'Fantasy Art', 'handicap': 0.0, 'sortPriority': 8, 'selectionId': 8913422}, {'runnerName': 'Founding Father', 'handicap': 0.0, 'sortPriority': 9, 'selectionId': 11324260}], 'totalMatched': 646.28, 'marketStartTime': datetime.datetime(2017, 3, 19, 14, 40), 'marketName': 'R7 1400m Hcap'}, {'marketId': '1.130413940', 'runners': [{'runnerName': '1. Markazi', 'handicap': 0.0, 'sortPriority': 1, 'selectionId': 11587869}, {'runnerName': '2. Platon', 'handicap': 0.0, 'sortPriority': 2, 'selectionId': 11144002}, {'runnerName': '3. Pando', 'handicap': 0.0, 'sortPriority': 3, 'selectionId': 12723254}, {'runnerName': '4. Mitchouka', 'handicap': 0.0, 'sortPriority': 4, 'selectionId': 12514813}, {'runnerName': '5. Joburg', 'handicap': 0.0, 'sortPriority': 5, 'selectionId': 12723252}, {'runnerName': '6. Yuman', 'handicap': 0.0, 'sortPriority': 6, 'selectionId': 12723251}, {'runnerName': '7. A Head Ahead', 'handicap': 0.0, 'sortPriority': 7, 'selectionId': 12723253}], 'totalMatched': 8.66, 'marketStartTime': datetime.datetime(2017, 3, 19, 14, 45), 'marketName': 'R4 1600m Listed'}, {'marketId': '1.130412611', 'runners': [{'runnerName': 'Mon Lino', 'handicap': 0.0, 'sortPriority': 1, 'selectionId': 10991116}, {'runnerName': 'Dawn Raider', 'handicap': 0.0, 'sortPriority': 2, 'selectionId': 125359}, {'runnerName': 'Kilcrea Bridge', 'handicap': 0.0, 'sortPriority': 3, 'selectionId': 10914090}, {'runnerName': 'Theatre Wine', 'handicap': 0.0, 'sortPriority': 4, 'selectionId': 10936323}, {'runnerName': 'Alkaa Lion', 'handicap': 0.0, 'sortPriority': 5, 'selectionId': 9483284}, {'runnerName': 'Sunken Treasure', 'handicap': 0.0, 'sortPriority': 6, 'selectionId': 11312993}, {'runnerName': 'Graineyhill', 'handicap': 0.0, 'sortPriority': 7, 'selectionId': 11562460}], 'totalMatched': 31926.2, 'marketStartTime': datetime.datetime(2017, 3, 19, 14, 50), 'marketName': '2m6f Mdn Hrd'}]
Я довольно новичок в понимании списков / словарей, и я борюсь с тем, как лучше всего получить эту информацию с минимальными издержками.