2012-04-04 9 views
5

Sto provando a creare una procedura python automatizzata che utilizza due elenchi separati per creare un dizionario e finora non riesco. Ho due elenchi ordinati in cui l'ennesimo elemento nella lista dei pugno corrisponde all'ennesimo elemento nella seconda lista e voglio combinarli in un dizionario.Procedura Python per popolare il dizionario da dati in 2 elenchi separati

Ad esempio, un sottoinsieme delle 2 liste è il seguente;

name = ['Adam', 'Alfred', 'Amy', 'Andy', 'Bob'] 
year = [1972, 1968, 1985, 1991, 1989] 

vorrei la mia uscita di essere:

birth_years = {'Adam':1972, 'Alfred':1968, 'Amy':1985, 'Andy':1991, 'Bob':1989} 

stavo cercando di fare questo con un ciclo for, ma non riuscivo a farlo funzionare. Apprezzo qualsiasi aiuto.

+1

È questo compito? In caso contrario, ripensa a ciò che sta accadendo a monte; avere i tuoi dati strutturati in liste parallele non è una buona idea e non avviene naturalmente. Ad esempio, tali elementi arrivano naturalmente nella stessa riga di un file di dati o della stessa riga di una tabella o di un foglio di calcolo, e puoi inserirli in un 'dict 'mentre leggi l'input. –

risposta

14

Utilizzare i zip e dict funzioni per costruire un dizionario di una lista di tuple:

birth_years = dict(zip(name, year)) 

E se siete curiosi, questo sarebbe come vorrei provare a farlo con un ciclo for:

birth_years = {} 

for index, n in enumerate(name): 
    birth_years[n] = years[index] 

Penso che mi piace il primo esempio di più.

+1

Non dovrebbe essere 'birth_years [n] = year [index]'? – DSM

+0

Sì, dovrebbe. Grazie! – Blender

1
birth_years = {} 
for i in range(len(name)): 
    birth_years[name[i]] = year[i] 
+4

Quanto poco unptonico. –

0

Le tue liste sarebbero meglio chiamati names e years. Hai iniziato bene cercando di farlo con un ciclo for. La maggior parte dei problemi pratici di elaborazione dei dati coinvolgono il controllo degli errori, che è solo un po 'difficile con one-liner. Esempio:

birth_years = {} 
for i, name in enumerate(names): 
    if name in birth_years: 
     log_duplicate(i, name, years[i])) 
    else: 
     birth_years[name] = years[i] 
1

Prova la comprensione dizionario:

birth_years = {nm:year[idx] for idx, nm in enumerate(name)} 
Problemi correlati