Alternativa Python> = 3.5: descompacte em uma lista literal [*newdict]
Novas generalizações de descompactação (PEP 448) foram introduzidas com o Python 3.5, permitindo agora:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Descompactar *
funciona com qualquer objeto iterável e, como os dicionários retornam suas chaves quando iteradas, é possível criar facilmente uma lista usando-a em um literal de lista.
Adicionar .keys()
ie [*newdict.keys()]
pode ajudar a tornar sua intenção um pouco mais explícita, apesar de custar uma consulta e chamada de função. (que, com toda a honestidade, não é algo com que você realmente deva se preocupar).
A *iterable
sintaxe é semelhante a fazer list(iterable)
e seu comportamento foi inicialmente documentado na seção Chamadas do manual de Referência do Python. Com o PEP 448, a restrição sobre onde *iterable
poderia aparecer foi diminuída, permitindo que também fosse colocada em literais de lista, conjunto e tupla, o manual de referência nas listas de Expressão também foi atualizado para declarar isso.
Embora seja equivalente à list(newdict)
diferença de que é mais rápido (pelo menos para dicionários pequenos), porque nenhuma chamada de função é realmente executada:
%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
com dicionários maiores, a velocidade é praticamente a mesma (a sobrecarga de iterar através de uma grande coleção supera o pequeno custo de uma chamada de função).
De maneira semelhante, você pode criar tuplas e conjuntos de chaves de dicionário:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
cuidado com a vírgula à direita no caso da tupla!