One liner: criando um dicionário de lista com índices como chaves

91

Quero criar um dicionário a partir de uma determinada lista, em apenas uma linha . As chaves do dicionário serão os índices e os valores os elementos da lista. Algo assim:

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

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

print(d)

Resultado:

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

Não tenho quaisquer requisitos específicos sobre o motivo pelo qual quero uma linha. Estou apenas explorando o python e me perguntando se isso é possível.

Nawaz
fonte
3
Que vantagem você acha que vai ganhar por ter este dicionário? As pesquisas de índice não serão mais rápidas com um dicionário.
Martijn Pieters
@MartijnPieters: Bem, eu poderia precisar, por exemplo, esta: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz
3
em seguida, basta usar zip(): dict(zip(x, a)).
Martijn Pieters

Respostas:

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

vai produzir

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

enumerate(sequence, start=0)

Retorne um objeto enumerado. sequência deve ser uma sequência, um iterador ou algum outro objeto que suporte iteração. O next()método do iterador retornado por enumerate()retorna um tuplecontendo uma contagem (do início que assume o valor 0) e os valores obtidos da iteração na sequência :

glglgl
fonte
2
@jamylak Mas não há necessidade de remover o seu. As pessoas poderiam ter aprendido sobre count()...
glglgl
@glglgl Deve haver uma maneira de fazer isso;)
jamylak
me vença por 2 minutos :)
jcr
48

Com outro construtor, você tem

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)
Kiriloff
fonte
7
@StefanoSanfilippo Dict e as compreensões de conjuntos foram portadas para Python 2.7.
kevingessner
Eu estou corrigido. Ainda assim, lembre-se de que isso não se aplica às versões anteriores do Python 2.
Stefano Sanfilippo
14

Experimente enumerate: ele retornará uma lista (ou iterador) de tuplas (i, a[i]), a partir da qual você pode construir um dict:

a = [51,27,13,56]  
b = dict(enumerate(a))
print b
Stefano Sanfilippo
fonte
13
{x:a[x] for x in range(len(a))}
Emilio M Bumachar
fonte
3

Simplesmente use a compreensão de lista.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Shahrukh khan
fonte