2009-08-05 15 views
6

tengo tres listas, la primera es una lista de nombres, el segundo es una lista de los diccionarios, y el tercero es una lista de datos. Cada posición en una lista corresponde con las mismas posiciones en las otras listas. Lista_1 [0] tiene datos correspondientes en lista_2 [0] y List_3 [0], etc. Me gustaría convertir estas tres listas en un diccionario dentro de un diccionario, con los valores de lista_1 siendo las claves primarias. ¿Cómo hago esto mientras mantengo todo en orden?Diccionarios Concatenación

Respuesta

13
>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> c = [7,8,9] 
>>> dict(zip(a, zip(b, c))) 
{1: (4, 7), 2: (5, 8), 3: (6, 9)} 

Véase el documentation para obtener más información sobre zip.

Como lionbest señala más adelante, es posible que desee mirar a itertools.izip() si los datos de entrada es grande. izip hace esencialmente lo mismo que zip, pero crea iteradores en lugar de las listas. De esta manera, no crea grandes listas temporales antes de crear el diccionario.

+5

Si a, b, c será enorme, recomiendo IZIP del módulo itertools. – Arpegius

+0

@lionbest: Buen punto, lo he agregado. – balpha

1

Python 3:

combined = {name:dict(data1=List_2[i], data2=List_3[i]) for i, name in enumerate(List_1)} 

Python 2.5:

combined = {} 
for i, name in enumerate(List_1): 
    combined[name] = dict(data1=List_2[i], data2=List_3[i]) 
0

si el orden de estas cosas las cosas, no se debe usar un diccionario. por definición, están desordenados. puede utilizar uno de los many ordered_dictionary implementations flotando alrededor, o esperar a que Python 2.7 o 3.1 que incluirá una implementación diccionario ordenado en el módulo de colecciones.