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
6
A
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.
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.
Se a, b, c sarà enorme, consiglio izip dal modulo itertools. – Arpegius
@lionbest: buon punto, l'ho aggiunto. – balpha