¿Cómo combino dos listas en un diccionario en Python?

Tengo dos listas de la misma longitud:

[1,2,3,4] y [a,b,c,d]

Quiero crear un diccionario donde tengo {1:a, 2:b, 3:c, 4:d}

¿Cuál es la mejor manera de hacer esto?

 dict(zip([1,2,3,4], [a,b,c,d])) 

Si las listas son grandes debes usar itertools.izip .

Si tiene más claves que valores y desea completar valores para las claves adicionales, puede usar itertools.izip_longest .

Aquí, a , b , c y d son variables – funcionará bien (siempre que estén definidas), pero probablemente quiso decir ['a','b','c','d'] si Los quiero como cuerdas.

zip toma el primer elemento de cada iterable y hace una tupla, luego el segundo elemento de cada uno, etc. etc.

dict puede tomar una iterable de iterables, donde cada iterable interior tiene dos ítems, luego usa la primera como la clave y la segunda como el valor para cada ítem.

 >>> dict(zip([1, 2, 3, 4], ['a', 'b', 'c', 'd'])) {1: 'a', 2: 'b', 3: 'c', 4: 'd'} 

Si no son del mismo tamaño, zip truncará el más largo.

 dict(zip([1,2,3,4], ['a', 'b', 'c', 'd'])) 

http://docs.python.org/library/functions.html

Si hay claves duplicadas en la primera lista que se asignan a diferentes valores en la segunda lista, como una relación de 1 a varios, pero necesita que los valores se combinen o agreguen o algo en lugar de actualizar, puede hacer esto:

 i = iter(["a", "a", "b", "c", "b"]) j = iter([1,2,3,4,5]) k = list(zip(i, j)) for (x,y) in k: if x in d: d[x] = d[x] + y #or whatever your function needs to be to combine them else: d[x] = y 

En ese ejemplo, d == {'a': 3, 'c': 4, 'b': 8}

No sé cuál es el mejor (¿el más simple? ¿El más rápido? ¿El más legible?), Pero una forma sería:

 dict(zip([1, 2, 3, 4], [a, b, c, d])) 

Me encontré necesitando crear un diccionario de tres listas (latitud, longitud y un valor), con lo siguiente haciendo el truco:

 > lat = [45.3,56.2,23.4,60.4] > lon = [134.6,128.7,111.9,75.8] > val = [3,6,2,5] > dict(zip(zip(lat,lon),val)) {(56.2, 128.7): 6, (60.4, 75.8): 5, (23.4, 111.9): 2, (45.3, 134.6): 3} 

o similar a los ejemplos anteriores:

 > list1 = [1,2,3,4] > list2 = [1,2,3,4] > list3 = ['a','b','c','d'] > dict(zip(zip(list1,list2),list3)) {(3, 3): 'c', (4, 4): 'd', (1, 1): 'a', (2, 2): 'b'} 

Nota: los diccionarios son “sin orden”, pero si desea verlos como “ordenados”, consulte ESTA pregunta si desea ordenar por clave, o ESTA pregunta si desea ordenar por valor.