Come posso convertire un dizionario in un elenco di tuple?


219

Se ho un dizionario come:

{ 'a': 1, 'b': 2, 'c': 3 }

Come posso convertirlo in questo?

[ ('a', 1), ('b', 2), ('c', 3) ]

E come posso convertirlo in questo?

[ (1, 'a'), (2, 'b'), (3, 'c') ]

7
[tuple(reversed(x)) for x in d.items()]
garej,

1
@garej: Dato xè già un tuplenel tuo codice (è la natura di itemsprodurre un iterabile di tuples), sarebbe più semplice / veloce farlo [x[::-1] for x in d.items()]; la sezione di inversione costruisce direttamente un'inversione tupledelle dimensioni appropriate anziché far tuplepopolare iterativamente il costruttore (con sovrallocazione e ridimensionamento alla fine) a tupleda un reversediteratore.
ShadowRanger

@ShadowRanger, hai ragione. Volevo solo essere esplicito che k, vin questi casi non è sempre necessario un modello.
garej

Nota: aggiunto compatibilitytag a causa delle differenze py2.x // py3.x
dreftymac

Risposte:


360
>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> d.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v, k) for k, v in d.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]

Non è nell'ordine desiderato, ma i dadi non hanno comunque un ordine specifico. 1 Ordinarlo o organizzarlo secondo necessità.

Vedi: items () , iteritems ()


In Python 3.x, non useresti iteritems(che non esiste più), ma invece utilizzeresti items, che ora restituisce una "vista" negli elementi del dizionario. Consulta il documento Novità di Python 3.0 e la nuova documentazione sulle viste .

1: La conservazione dell'ordine di inserimento per i dadi è stata aggiunta in Python 3.7


8
items () restituisce una vista dict_keys in python3. Termina questa chiamata con un cast in un elenco "list ()". Vedi la risposta di @ SilentGhost
Erich,
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.