Jedna linijka: tworzenie słownika z listy z indeksami jako kluczami

91

Chcę utworzyć słownik z podanej listy, w jednej linii . Kluczami słownika będą indeksy, a wartości elementami listy. Coś takiego:

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

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

print(d)

Wynik:

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

Nie mam żadnych konkretnych wymagań, dlaczego chcę mieć jedną linię. Po prostu odkrywam Pythona i zastanawiam się, czy to możliwe.

Nawaz
źródło
3
Jak myślisz, jaką korzyść uzyskasz mając ten słownik? Wyszukiwanie indeksu nie będzie szybsze dzięki słownikowi.
Martijn Pieters
@MartijnPieters: Cóż, mogę potrzebować, np to: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz
3
następnie wystarczy użyć zip(): dict(zip(x, a)).
Martijn Pieters

Odpowiedzi:

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

będzie produkować

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

enumerate(sequence, start=0)

Zwróć obiekt wyliczeniowy. sekwencja musi być sekwencją, iteratorem lub innym obiektem obsługującym iterację. next()Metody iteracyjnej zwrócony przez enumerate()Zwraca tuplezawierających liczbę (od początku domyślnie jest to 0) i wartości uzyskanych z kolejno po sekwencji :

glglgl
źródło
2
@jamylak Ale nie musisz usuwać twojego. Ludzie mogli dowiedzieć się o count()...
glglgl
50

Z innym konstruktorem masz

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)
kiriloff
źródło
7
@StefanoSanfilippo Dict i zestaw wyrażeń zostały przeniesione do Pythona 2.7.
kevingessner
Poprawiono mnie. Pamiętaj jednak, że nie dotyczy to poprzednich wersji Pythona 2.
Stefano Sanfilippo
14

Spróbuj enumerate: zwróci listę (lub iterator) krotek (i, a[i]), z których możesz zbudować dict:

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

Po prostu użyj rozumienia list.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Shahrukh Khan
źródło