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?


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 ^).


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.