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.


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 :


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)

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.