In Python 3 il metodo restituisce un dict.values()
dictionary view object, non una lista come fa in Python 2. viste Dizionario hanno una lunghezza, può essere iterato e supportare il test di appartenenza, ma non supporta l'indicizzazione.
per rendere il lavoro di codice in entrambe le versioni, è possibile utilizzare uno questi:
{names[i]:value for i,value in enumerate(d.values())}
o
values = list(d.values())
{name:values[i] for i,name in enumerate(names)}
Di gran lunga il modo più veloce, più semplice fare la stessa cosa in entrambe le versioni sarebbe:
dict(zip(names, d.values()))
Si noti tuttavia che tutti questi metodi forniranno risultati che varieranno a seconda del contenuto effettivo di d
. Per ovviare a questo, potresti utilizzare uno OrderedDict, che ricorda l'ordine in cui le chiavi sono state inserite per la prima volta, in modo da poter contare sull'ordine di ciò che viene restituito dal metodo values()
.
'values' restituisce ora un oggetto di visualizzazione http://docs.python.org/3.2/library/stdtypes.html#dictionary-view-objects – dm03514
Perché stai facendo affidamento sull'ordine dei' valori' restituiti da un dizionario comunque? –
Sì, questo codice non è affidabile a meno che d non sia un 'OrderedDict' - e anche se è così sembra che ci debba essere un modo migliore. –