Python> = 3.5 alternativa: descomprimir en una lista literal [*newdict]
Se introdujeron nuevas generalizaciones de desempaquetado (PEP 448) con Python 3.5 que le permite ahora hacer fácilmente:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Desempaquetar *
funciona con cualquier objeto que sea iterable y, dado que los diccionarios devuelven sus claves cuando se repiten, puede crear fácilmente una lista usándola dentro de un literal de lista.
Agregar, por .keys()
ejemplo, [*newdict.keys()]
podría ayudar a que su intento sea un poco más explícito, aunque le costará una búsqueda de funciones e invocación. (que, con toda honestidad, no es algo de lo que realmente deba preocuparse).
La *iterable
sintaxis es similar a la de hacer list(iterable)
y su comportamiento se documentó inicialmente en la sección Llamadas del manual de referencia de Python. Con PEP 448, la restricción sobre dónde *iterable
podría aparecer se aflojó permitiendo que también se coloque en literales de lista, conjunto y tupla, el manual de referencia en las listas de Expresión también se actualizó para indicar esto.
Aunque es equivalente a list(newdict)
la diferencia de que es más rápido (al menos para diccionarios pequeños) porque no se realiza ninguna llamada a la función:
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
con diccionarios más grandes, la velocidad es prácticamente la misma (la sobrecarga de iterar a través de una gran colección supera el pequeño costo de una llamada a función).
De manera similar, puede crear tuplas y conjuntos de claves de diccionario:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
¡cuidado con la coma final en el caso de tupla!