Mantén la atención porque en esta división hallarás el arreglo que buscas.
Solución:
Puedes usar itertools.zip_longest
y filtrar None
valores:
from itertools import zip_longest
[x: y for x, y in zip(d, t) if y is not None for t in zip_longest(*d.values())]
# ['name': 'bob', 'age': 13, 'height': 164, 'job': 'programmer',
# 'name': 'john', 'age': 19, 'height': 188,
# 'name': 'harry', 'age': 23,
# 'name': 'mary']
Puedes usar zip_longest
aquí:
from itertools import zip_longest
keys = d.keys()
d2 = [
k: v for k, v in zip(keys, vs) if v is not None
for vs in zip_longest(*d.values())
]
Si los valores pueden ser None
también, podemos eludir eso usando un valor ficticio:
from itertools import zip_longest
keys = d.keys()
dummy = object()
d2 = [
k: v for k, v in zip(keys, vs) if v is not dummy
for vs in zip_longest(*d.values(), fillvalue=dummy)
]
Aquí el muñeco es un objeto del cual estamos seguros que no es parte de los ítems en d
(ya que lo construimos después de que construimos d
). usando un is
comparación, así podemos saber si ese valor era el “fillvalue”.
Esto nos dará:
>>> d2
['name': 'bob', 'age': 13, 'height': 164, 'job': 'programmer', 'name': 'john', 'age': 19, 'height': 188, 'name': 'harry', 'age': 23, 'name': 'mary']
Aquí hay otro enfoque:
d = 'name': ['bob', 'john', 'harry', 'mary'], 'age': [13, 19, 23], 'height': [164, 188], 'job': ['programmer']
m = max(map(len, d.values()))
d1 = k : (v if len(v)==m else v+['']*(m-len(v))) for k,v in d.items()
d2 = [k:v for k,v in zip(d, t) if v for t in zip(*d1.values())]
print(d2)
Producción :
['height': 164, 'age': 13, 'job': 'programmer', 'name': 'bob', 'height': 188, 'age': 19, 'name': 'john', 'age': 23, 'name': 'harry', 'name': 'mary']
Aquí puedes ver las comentarios y valoraciones de los lectores
Si haces scroll puedes encontrar las ilustraciones de otros desarrolladores, tú aún tienes la habilidad mostrar el tuyo si lo crees conveniente.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)