español - tuple python 3
Convertir lista a una lista de tuplas python (7)
Soy novato de Python y necesito convertir una lista en diccionario. Sé que podemos convertir una lista de tuplas en diccionarios.
Esta es la lista de entrada:
L = [1,term1, 3, term2, x, term3,... z, termN]
y quiero convertir esta lista a una lista de tuplas (O a un diccionario) como esta:
[(1, term1), (3, term2), (x, term3), ...(z, termN)]
¿Cómo podemos hacer eso fácilmente Python?
¿Usando cortar?
L = [1, "term1", 2, "term2", 3, "term3"]
L = zip(L[::2], L[1::2])
print L
El siguiente código se ocupará de la lista de tamaño par e impar:
[set(L[i:i+2]) for i in range(0, len(L),2)]
Enumere directamente en un diccionario usando zip
para emparejar elementos pares pares e impares:
m = [ 1, 2, 3, 4, 5, 6, 7, 8 ]
d = { x : y for x, y in zip(m[::2], m[1::2]) }
o, dado que está familiarizado con la tupla -> dirección dict:
d = dict(t for t in zip(m[::2], m[1::2]))
incluso:
d = dict(zip(m[::2], m[1::2]))
Prueba con el grupo de clustering idiom:
zip(*[iter(L)]*2)
Desde https://docs.python.org/2/library/functions.html :
El orden de evaluación de izquierda a derecha de los iterables está garantizado. Esto hace posible un modismo para agrupar una serie de datos en grupos de longitud n usando zip (* [iter (s)] * n).
Prueba esto ,
>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
>>> it = iter(L)
>>> [(x, next(it)) for x in it ]
[(1, ''term1''), (3, ''term2''), (4, ''term3''), (5, ''termN'')]
>>>
O
>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
>>> [i for i in zip(*[iter(L)]*2)]
[(1, ''term1''), (3, ''term2''), (4, ''term3''), (5, ''termN'')]
O
>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
>>> map(None,*[iter(L)]*2)
[(1, ''term1''), (3, ''term2''), (4, ''term3''), (5, ''termN'')]
>>>
>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
# Create an iterator
>>> it = iter(L)
# zip the iterator with itself
>>> zip(it, it)
[(1, ''term1''), (3, ''term2''), (4, ''term3''), (5, ''termN'')]
¿Quieres agrupar tres elementos a la vez?
>>> zip(it, it, it)
¿Desea agrupar N elementos a la vez?
# Create N copies of the same iterator
it = [iter(L)] * N
# Unpack the copies of the iterator, and pass them as parameters to zip
>>> zip(*it)
[(L[i], L[i+1]) for i in xrange(0, len(L), 2)]