Una riga: creazione di un dizionario da un elenco con indici come chiavi


91

Voglio creare un dizionario da un dato elenco, in una sola riga . Le chiavi del dizionario saranno gli indici ei valori saranno gli elementi della lista. Qualcosa come questo:

a = [51,27,13,56]         #given list

d = one-line-statement    #one line statement to create dictionary

print(d)

Produzione:

{0:51, 1:27, 2:13, 3:56}

Non ho requisiti specifici sul motivo per cui voglio una riga. Sto solo esplorando Python e mi chiedo se sia possibile.


3
Quale vantaggio pensi di ottenere dall'avere questo dizionario? Le ricerche nell'indice non saranno più veloci con un dizionario.
Martijn Pieters

@MartijnPieters: Beh, potrei avere bisogno, per esempio, questo: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz

3
poi basta usare zip(): dict(zip(x, a)).
Martijn Pieters

Risposte:


158
a = [51,27,13,56]
b = dict(enumerate(a))
print(b)

produrrà

{0: 51, 1: 27, 2: 13, 3: 56}

enumerate(sequence, start=0)

Restituisce un oggetto enumerato. sequenza deve essere una sequenza, un iteratore o un altro oggetto che supporta l'iterazione. Il next()metodo dell'iteratore restituito da enumerate()restituisce a tuplecontenente un conteggio ( dall'inizio il cui valore predefinito è 0) ei valori ottenuti dall'iterazione sulla sequenza :


2
@jamylak Ma non c'è bisogno di rimuovere il tuo. La gente avrebbe potuto sapere di count()...
glglgl

@glglgl Ci dovrebbe essere un modo per farlo;)
jamylak


48

Con un altro costruttore, hai

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)

7
@StefanoSanfilippo Dict e le comprensioni dei set sono stati portati indietro in Python 2.7.
kevingessner

Mi correggo. Tuttavia, ricorda che questo non si applica alle precedenti versioni di Python 2.
Stefano Sanfilippo

14

Prova enumerate: restituirà un elenco (o iteratore) di tuple (i, a[i]), da cui puoi costruire un dict:

a = [51,27,13,56]  
b = dict(enumerate(a))
print b


3

Usa semplicemente la comprensione dell'elenco.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
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.