Questo è uno dei rottura modifiche tra Python 2 e 3.
In Python 2:
>>> help(dict.keys)
keys(...)
D.keys() -> list of D's keys
In Python 3:
>>> help(dict.keys)
keys(...)
D.keys() -> a set-like object providing a view on D's keys
Questa modifica del comportamento rende molto di senso dato che un dict è semanticamente non ordinato e le sue chiavi sono uniche - proprio come un set.
Questo cambiamento significa che non è necessario creare un nuovo elenco di chiavi ogni volta che si desidera eseguire una sorta di confronto di set con i tasti di un dict.
ottenere lo stesso comportamento in 2 e 3
Per aiutare la transizione a Python 3, Python 2.7 ha un altro metodo dict, viewkeys
.Il metodo viewkeys
è più simile a dict.keys
il metodo di Python 3:
>>> d
{'a': None, 'c': None, 'b': None, 'd': None}
>>> for k in d.viewkeys(): print k
...
a
c
b
d
>>> d.viewkeys() & set('abc')
set(['a', 'c', 'b'])
In Python 3, l'analogo più vicino al vecchio comportamento è quello di passare dict.keys()
a list
:
>>> d
{'d': None, 'a': None, 'c': None, 'b': None}
>>> list(d.keys())
['d', 'a', 'c', 'b']
O semplicemente passare il dict a list
, dal momento che un dict sarà iterare su suoi tasti in ogni modo:
>>> list(d)
['d', 'a', 'c', 'b']
si poteva cr EATE a funzioni di utilità di astrarre il comportamento nel 2 e 3:
if hasattr(dict, 'viewkeys'): # Python 2.7
def keys(d):
return d.viewkeys()
else: # Python 3
def keys(d):
return d.keys()
e passare un dict per list
per ottenere la forma di lista, e in entrambi i 2 e 3, si otterrà lo stesso risultato:
>>> d
{'b': None, 'a': None, 'c': None, 'd': None}
>>> keys(d)
dict_keys(['b', 'a', 'c', 'd'])
>>> list(d)
['b', 'a', 'c', 'd']
Dal momento che nessuno ha collegato la documentazione ufficiale ancora, lo farò: [** vista Dizionario oggetto **] (http: //docs.python. org/py3k/library/stdtypes.html # dizionario-view-oggetti). –
Si noti che i dizionari non sono ordinati, quindi b.keys() [0] non è generalmente una cosa molto utile da fare. –