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?

man selbst
quelle
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 ^).

NPE
quelle
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