Python> = 3.5 Alternative: In ein Listenliteral entpacken [*newdict]
Mit Python 3.5 wurden neue Verpackungsverallgemeinerungen (PEP 448) eingeführt, mit denen Sie jetzt ganz einfach Folgendes tun können:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Das Entpacken mit *
funktioniert mit jedem iterierbaren Objekt. Da Wörterbücher ihre Schlüssel beim Durchlaufen zurückgeben, können Sie eine Liste einfach erstellen, indem Sie sie in einem Listenliteral verwenden.
Das Hinzufügen von .keys()
dh kann [*newdict.keys()]
dazu beitragen, Ihre Absicht ein wenig deutlicher zu machen, obwohl es Sie eine Funktionssuche und einen Aufruf kostet. (worüber Sie sich ehrlich gesagt keine Sorgen machen sollten).
Die *iterable
Syntax ähnelt der von Doing list(iterable)
und ihr Verhalten wurde ursprünglich in der Dokumentation dokumentiert Abschnitt Aufrufe des Python-Referenzhandbuchs dokumentiert. Mit PEP 448 wurde die Beschränkung, wo *iterable
angezeigt werden kann, gelockert, sodass es auch in Listen-, Set- und Tupelliterale eingefügt werden kann. Das Referenzhandbuch zu Ausdruckslisten wurde ebenfalls aktualisiert, um dies anzugeben.
Obwohl gleichbedeutend list(newdict)
mit dem Unterschied, dass es schneller ist (zumindest für kleine Wörterbücher), weil tatsächlich kein Funktionsaufruf ausgeführt wird:
%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
Bei größeren Wörterbüchern ist die Geschwindigkeit nahezu gleich (der Aufwand für das Durchlaufen einer großen Sammlung übertrifft die geringen Kosten eines Funktionsaufrufs).
Auf ähnliche Weise können Sie Tupel und Sätze von Wörterbuchschlüsseln erstellen:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
Achten Sie auf das nachfolgende Komma im Tupelgehäuse!