2014-03-31 3 views
4

Привет, пожалуйста, как я могу добавить кортежи в вложенном списке список словарей, чтобы сформировать новый список кортежей следующим образом:Строительные кортежи из вложенных списков

nde = [{'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9}, 
      {'length': 0.48, 'modes': 'cw', 'type': '99', 'lanes': 9}, 
      {'length': 0.88, 'modes': 'cw', 'type': '99', 'lanes': 9}] 

dge = [[(1001, 7005),(3275, 8925)], [(1598,6009),(1001,14007)]] 

Как я могу добавить их, чтобы иметь результат отформатирован следующим образом:

rslt = [(1001, 7005, {'length': 0.35, 'modes': 'cw', 'type': '99', 'lanes': 9}... ] 

Я попытался это:

[(k1[0], k1[1], k2) for k1, k2 in zip(dge, nde)] 

, но это не дает желаемого результата. Благодаря

+2

У вас есть три словаря в 'nde', но два списка/четыре кортежа в' dge'. Это кажется странным. – DSM

ответ

4

Вам нужно выравнивать список списков, а затем использовать его с zip:

>>> from itertools import chain 
>>> [(k1[0], k1[1], k2) for k1, k2 in zip(chain.from_iterable(dge), nde)] 
[(1001, 7005, {'lanes': 9, 'length': 0.35, 'type': '99', 'modes': 'cw'}), 
(3275, 8925, {'lanes': 9, 'length': 0.48, 'type': '99', 'modes': 'cw'}), 
(1598, 6009, {'lanes': 9, 'length': 0.88, 'type': '99', 'modes': 'cw'})] 

Docs: itertools.chain.from_iterable

3

Вы вложенный список, так что вы должны выравниваться их перед Ziping:

import itertools 
[(k1[0], k1[1], k2) for k1, k2 in zip(itertools.chain(*dge), nde)] 
Смежные вопросы