Perché dict.keys () di Python restituisce una lista e non un set?


90

Mi sarei aspettato che il metodo keys di Python restituisse un set invece di un elenco. Dal momento che assomiglia di più al tipo di garanzie che darebbero le chiavi di una hashmap. Nello specifico, sono unici e non ordinati, come un insieme. Tuttavia, questo metodo restituisce un elenco:

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

È solo un errore nell'API Python o c'è qualche altro motivo che mi manca?


1
Questo non è più il caso in Python 3. docs.python.org/3/library/stdtypes.html#dict-views
Boris

Risposte:


100

Uno dei motivi è che dict.keys()precede l'introduzione dei set nella lingua.

Si noti che il tipo di ritorno di dict.keys()è cambiato in Python 3: la funzione ora restituisce una vista "simile a un insieme" piuttosto che un elenco.

Per set-come viste, tutte le operazioni definite per la classe di base astratta collections.abc.Setsono disponibili (per esempio ==, <o ^).


6
Ed è una vista invece di un elenco / set / ecc. perché raramente è necessario copiare tutte le chiavi.

31
e quelle viste possono essere gestite come set()! che consentono le dict.keys() | set()operazioni. Py3 rocks :)
yota

2
Se sei bloccato con Py2, puoi fare lo stesso chiamandolo dict.viewkeys()e usandolo con le operazioni di set |, &...
Tobia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.