2012-12-14 5 views
60

Mi sarei aspettato che il metodo con le chiavi di Python restituisse un set anziché un elenco. Dal momento che ricorda più da vicino il tipo di garanzie che le chiavi di una hashmap darebbero. In particolare, sono unici e non ordinati, come un set. Tuttavia, questo metodo restituisce un elenco:Perché dict.keys() di Python restituisce un elenco e non un set?

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

È questo solo un errore nella API di Python o c'è qualche altra ragione che mi manca?

risposta

58

Un motivo è che dict.keys() precede l'introduzione di set nella lingua.

Si noti che il tipo di ritorno di dict.keys() è cambiato in Python 3: la funzione restituisce ora un view anziché un elenco.

+5

Ed è una vista invece di una lista/set/ecc. perché raramente c'è bisogno di copiare tutte le chiavi. – delnan

+9

e quelle viste possono essere gestite come un 'set()'! che permettono 'dict.keys() | set() 'operazioni. Py3 rocks :) – yota

+0

Se sei bloccato con Py2, puoi fare lo stesso chiamando 'dict.viewkeys()' e usarlo con le operazioni set '|', '&' ... – Tobia

Problemi correlati