Python> = 3.5 alternativa: decomprimere in un elenco letterale [*newdict]
Sono state introdotte nuove generalizzazioni di decompressione (PEP 448) con Python 3.5 che consente ora di eseguire facilmente:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Disimballare con *
funziona con qualsiasi oggetto iterabile e, poiché i dizionari restituiscono le loro chiavi quando vengono iterati, è possibile creare facilmente un elenco utilizzandolo all'interno di un elenco letterale.
L'aggiunta, ad .keys()
esempio, [*newdict.keys()]
potrebbe aiutare a rendere un po 'più esplicito il tuo intento, anche se ti costerà una funzione di ricerca e invocazione. (che, in tutta onestà, non è qualcosa di cui dovresti davvero preoccuparti).
La *iterable
sintassi è simile al fare list(iterable)
e il suo comportamento è stato inizialmente documentato nella sezione Chiamate del manuale di riferimento di Python. Con PEP 448 la restrizione su dove *iterable
potrebbe apparire è stata allentata permettendo di posizionarla anche in elenco, impostare e tuple letterali, il manuale di riferimento sugli elenchi di espressioni è stato aggiornato per affermarlo.
Sebbene equivalente a list(newdict)
con la differenza che è più veloce (almeno per i dizionari di piccole dimensioni) perché in realtà non viene eseguita alcuna chiamata di funzione:
%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 dizionari più grandi la velocità è praticamente la stessa (il sovraccarico di iterare attraverso una grande raccolta supera il piccolo costo di una chiamata di funzione).
In modo simile, puoi creare tuple e set di chiavi del dizionario:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
attenzione alla virgola finale nel caso tupla!