2012-04-04 10 views
5

Estoy tratando de crear un procedimiento de python automatizado que utiliza dos listas separadas para crear un diccionario y hasta ahora estoy fallando. Tengo dos listas ordenadas donde el enésimo artículo en la primera lista corresponde al enésimo ítem en la segunda lista y quiero combinarlos en un diccionario.Procedimiento de Python para poblar el diccionario de datos en 2 listas separadas

Por ejemplo, un subconjunto de las 2 listas es el siguiente;

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

Me gustaría que mi salida sea:

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

yo estaba tratando de hacer esto con un bucle, pero no pude conseguir que funcione. Agradezco cualquier ayuda.

+1

Es esta tarea? Si no, reconsidere lo que está sucediendo río arriba; tener sus datos estructurados en listas paralelas no es una buena idea y no ocurre naturalmente. Por ejemplo, tales cosas llegan de forma natural en la misma línea de un archivo de datos o la misma fila de una tabla de base de datos u hoja de cálculo, y puede rellenarlas en un 'dict' a medida que lee la entrada. –

Respuesta

14

Utilice los zip y dict funciones para construir un diccionario de una lista de tuplas:

birth_years = dict(zip(name, year)) 

Y si usted es curioso, esto sería cómo iba a tratar de hacerlo con un bucle for:

birth_years = {} 

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

Creo que me gusta el primer ejemplo más.

+1

¿No debería ser 'birth_years [n] = year [index]'? – DSM

+0

Sí, debería. ¡Gracias! – Blender

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

Qué muy antiponético. –

0

Sus listas serían mejor llamarlas names y years. Has tenido un buen comienzo tratando de hacerlo con un bucle for. La mayoría de los problemas prácticos de procesamiento de datos implican la comprobación de errores, lo cual es un poco difícil con los one-liners. Ejemplo:

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

Pruebe un diccionario por comprensión:

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