Dlaczego dict.keys () w Pythonie zwraca listę, a nie zestaw?

90

Spodziewałbym się, że metoda keys w Pythonie zwróci zestaw zamiast listy. Ponieważ najbardziej przypomina rodzaj gwarancji, które dawałyby klucze haszmapy. W szczególności są one niepowtarzalne i nieposortowane, jak zestaw. Jednak ta metoda zwraca listę:

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

Czy to tylko błąd w API Pythona, czy jest jakiś inny powód, dla którego mi brakuje?

się
źródło
1
Tak już nie jest w Pythonie 3. docs.python.org/3/library/stdtypes.html#dict-views
Boris

Odpowiedzi:

100

Jednym z powodów jest to, że dict.keys()poprzedza to wprowadzenie zestawów do języka.

Zwróć uwagę, że zwracany typ dict.keys()zmienił się w Pythonie 3: funkcja zwraca teraz widok podobny do zestawu, a nie listę.

Na podobny zestaw poglądów wszystkich operacji określonych dla abstrakcyjnej klasy bazowej collections.abc.Setdostępne są (na przykład ==, <albo ^).

NPE
źródło
6
I to jest widok zamiast listy / set / etc. ponieważ rzadko zachodzi potrzeba kopiowania wszystkich kluczy.
31
a te widoki można traktować jako set()! które pozwalają na dict.keys() | set()operacje. Py3 rządzi :)
yota
2
Jeśli utkniesz z Py2, możesz zrobić to samo, dzwoniąc dict.viewkeys()i używając go z operacjami na zestawach |, &...
Tobia