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.


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 :


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)

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.