2009-08-05 18 views
6

Ho tre elenchi, il primo è un elenco di nomi, il secondo è un elenco di dizionari e il terzo è un elenco di dati. Ogni posizione in una lista corrisponde alle stesse posizioni negli altri elenchi. List_1 [0] ha dati corrispondenti in List_2 [0] e List_3 [0], ecc. Vorrei trasformare questi tre elenchi in un dizionario all'interno di un dizionario, con i valori in List_1 come chiavi primarie. Come faccio a fare questo mantenendo tutto in ordine?Concatenazione di dizionari

risposta

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)} 

Vedere la documentation per più informazioni zip.

Come indicato di seguito, potrebbe essere utile esaminare itertools.izip() se i dati di input sono grandi. izip fa essenzialmente la stessa cosa di zip, ma crea iteratori anziché elenchi. In questo modo, non creare elenchi temporanei di grandi dimensioni prima di creare il dizionario.

+5

Se a, b, c sarà enorme, consiglio izip dal modulo itertools. – Arpegius

+0

@lionbest: buon punto, l'ho aggiunto. – 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

se l'ordine di questi argomenti cose, non si dovrebbe usare un dizionario. per definizione, sono non ordinati. è possibile utilizzare uno degli many ordered_dictionary implementations mobile oppure attendere Python 2.7 o 3.1 che includerà un'implementazione di dizionario ordinata nel modulo delle raccolte.