Python >= 3.5 Alternative: Entpacken in ein Listenliteral [*newdict]
Neue Entpackungsverallgemeinerungen (PEP 448) wurden mit Python 3.5 eingeführt, was es Ihnen jetzt leicht ermöglicht:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Das Entpacken mit *
funktioniert mit jedem Objekt, das durchlaufen werden kann und da Dictionaries ihre Schlüssel zurückgeben, wenn sie durchlaufen werden, können Sie leicht eine Liste erstellen, indem Sie es in ein Listenliteral einfügen.
Das Hinzufügen von .keys()
z.B. [*newdict.keys()]
könnte dazu beitragen, Ihre Absicht etwas expliziter zu machen, obwohl es einen Funktionsaufruf und eine -aufruf kostet. (was ehrlich gesagt etwas ist, worüber Sie sich wirklich keine Sorgen machen sollten).
Die Syntax <code>iterable</code> ist ähnlich wie <code>list(iterable)</code> und ihr Verhalten wurde ursprünglich im <a href="https://docs.python.org/3/reference/expressions.html#calls" rel="noreferrer">Abschnitt Calls</a> des Python-Referenzhandbuchs dokumentiert. Mit PEP 448 wurde die Einschränkung, wo <code>iterable</code> erscheinen konnte, gelockert, sodass es auch in Listen-, Set- und Tuple-Literalen platziert werden konnte, das Referenzhandbuch zu <a href="https://docs.python.org/3/reference/expressions.html#expression-lists" rel="noreferrer">Expression-Listen</a> wurde ebenfalls aktualisiert, um dies festzustellen.
Obwohl äquivalent zu list(newdict)
mit dem Unterschied, dass es schneller ist (zumindest für kleine Dictionaries), weil kein Funktionsaufruf tatsächlich durchgeführt wird:
%timeit [*newdict]
1000000 loops, best of 3: 249 ns pro Schleife
%timeit list(newdict)
1000000 loops, best of 3: 508 ns pro Schleife
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns pro Schleife
Bei größeren Dictionaries ist die Geschwindigkeit ziemlich gleich (der Overhead beim Durchlaufen einer großen Sammlung übertrifft die geringen Kosten eines Funktionsaufrufs).
Auf ähnliche Weise können Sie Tupel und Sets von Schlüsseln eines Dictionaries erstellen:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
vorsichtig mit dem nachgestellten Komma im Falle des Tupels!