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.