En la respuesta por Konrad Rudolph
postal casi hace lo que quiere; desafortunadamente, en lugar de pedalear en la lista más corta, se rompe. Tal vez hay una función relacionada que ciclos?
Aquí está una manera:
keys = ['name', 'age']
values = ['Monty', 42, 'Matt', 28, 'Frank', 33]
iter_values = iter(values)
[dict(zip(keys, iter_values)) for _ in range(len(values) // len(keys))]
no lo llamaré Pythonic (creo que es demasiado inteligente), pero podría ser lo que están buscando.
no hay ningún beneficio en el ciclismo la lista keys
usando itertools
.cycle()
, ya que cada recorrido de keys
corresponde a la creación de una dictionnary.
EDIT: Aquí hay otra manera:
def iter_cut(seq, size):
for i in range(len(seq)/size):
yield seq[i*size:(i+1)*size]
keys = ['name', 'age']
values = ['Monty', 42, 'Matt', 28, 'Frank', 33]
[dict(zip(keys, some_values)) for some_values in iter_cut(values, len(keys))]
Esto es mucho más Pythonic: hay una función de utilidad puede leer con un propósito claro, y el resto del código fluye naturalmente de ella.
El uso de l (minúscula ell) como nombre de variable es una violación mortal pep8. ¡Su licencia de Pythoning queda revocada! ;) – ddaa
¡Gracias Toni! Te casarías conmigo !? Marcó su respuesta como aceptada, ya que es (en este momento) el más simple y fácil de leer en mi humilde opinión. –
Use zip y la parte del paso del operador de división para poner todo esto en una sola comprensión de la lista: [dict (zip (claves, a)) para un zip en blanco (valores [:: 2], valores [1 :: 2])] – jblocksom