Elenco di tuple nel dizionario


112

Ecco come sto attualmente convertendo un elenco di tuple in dizionario in Python:

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

C'è un modo migliore? Sembra che dovrebbe esserci una battuta per farlo.

Risposte:


178

Basta chiamare dict()direttamente l'elenco delle tuple

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}

1
Derp, sapevo che ci sarebbe stato un modo semplice per farlo ... Venendo da Ruby qui, cercando di imparare il modo Python di fare le cose. Grazie!
Sarah Vessels

5
@chandresh Questo fa lavoro in Python 3, quindi è necessario alcun aggiornamento.
Sven Marnach

@SvenMarnach, ecco il mio output dello stesso comando che hai scritto sopra sul terminale py 3.5. Traceback (ultima chiamata più recente): File "<ipython-input-313-7bb3559567ff>", riga 1, in <module> dict (my_list) TypeError: l'oggetto 'Dictionary' non è richiamabile
CKM

4
@chandresh Questo non ha nulla a che fare con Python 3 - è perché hai una variabile chiamata dict, che ombreggia il built-in Python con lo stesso nome. Non dovresti mai farlo.
Sven Marnach

@SvenMarnach Oh. Grazie. Ha funzionato. In realtà, ho ricevuto del codice dal Web e ho provato a eseguirlo. Sembra che l'autore abbia usato dictcome nome della variabile da cui ho ricevuto l'errore. Grazie ancora.
CKM

23

Il dictcostruttore accetta l'input esattamente come lo hai (tuple chiave / valore).

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

Dalla documentazione :

Ad esempio, restituiscono tutti un dizionario uguale a {"one": 1, "two": 2}:

dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])

15

Con dictcomprensione:

h = {k:v for k,v in l}

4
bello perché ti permette di formattare la chiave / valore prima di aggiungerlo al dict
jfunk

7

Sembra che tutti qui presumano che l'elenco delle tuple abbia una mappatura uno a uno tra chiave e valori (ad esempio, non ha chiavi duplicate per il dizionario). Poiché questa è la prima domanda in arrivo cercando su questo argomento, inserisco una risposta per un caso più generale in cui abbiamo a che fare con i duplicati:

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}
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.