Warum gibt Pythons dict.keys () eine Liste und keine Menge zurück?


84

Ich hätte erwartet, dass Pythons Schlüsselmethode einen Satz anstelle einer Liste zurückgibt. Da es der Art von Garantien, die Schlüssel einer Hashmap geben würden, am ähnlichsten ist. Insbesondere sind sie eindeutig und nicht wie ein Satz sortiert. Diese Methode gibt jedoch eine Liste zurück:

>>> d = {}
>>> d.keys().__class__
<type 'list'>

Ist dies nur ein Fehler in der Python-API oder fehlt mir ein anderer Grund?


1
Dies ist in Python 3 nicht mehr der Fall. Docs.python.org/3/library/stdtypes.html#dict-views
Boris

Antworten:


96

Ein Grund ist, dass dict.keys()vor der Einführung von Mengen in die Sprache.

Beachten Sie, dass sich der Rückgabetyp von dict.keys()in Python 3 geändert hat: Die Funktion gibt jetzt eine "set-ähnliche" Ansicht anstelle einer Liste zurück.

Für Set-ähnliche Ansichten, alle Operationen für die abstrakte Basisklasse definiert collections.abc.Setsind vorhanden (zum Beispiel ==, <oder ^).


6
Und es ist eine Ansicht anstelle einer Liste / Set / etc. weil selten alle Schlüssel kopiert werden müssen.

31
und diese Ansichten können als set()! die dict.keys() | set()Operationen ermöglichen . Py3 rockt :)
Yota

2
Wenn Sie mit Py2 nicht weiterkommen, können Sie dasselbe tun, indem Sie es aufrufen dict.viewkeys()und mit festgelegten Operationen verwenden |, &...
Tobia
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.