2013-05-17 17 views
61

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

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

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

print(d) 

wyjściowa:

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

Nie mam żadnych szczególnych wymagań, dlaczego chcę jeden linię. Po prostu badam Pythona i zastanawiam się, czy to możliwe.

+1

Jaką przewagę zyskasz dzięki posiadaniu tego słownika? Wyszukiwanie indeksu nie będzie szybsze ze słownikiem. –

+0

@MartijnPieters: Cóż, może potrzebować, na przykład: '{[x [0]: 51, x [1]: 27, x [2]: 13, x [3]: 56}'. – Nawaz

+2

następnie użyj 'zip()': 'dict (zip (x, a))'. –

Odpowiedz

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

spowoduje

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

enumerate(sequence, start=0)

zwrócić obiekt enumerate. Sekwencja musi być sekwencją, obiektem iteratorowym lub innym obiektem obsługującym iterację. next() metody iteracyjnej zwrócony przez enumerate() zwraca tuple zawierający liczby (z początku domyślnie jest to 0) i wartości uzyskanych z kolejno po sekwencję:

+0

+1 Zapomniałem najprostszej rzeczy – jamylak

+2

@jamylak Ale nie trzeba usuwać twojej. Ludzie mogli się nauczyć o 'count()' ... – glglgl

+0

+1. Świetna odpowiedź. – Nawaz

14

Spróbuj enumerate: powróci do listy (lub iterator) krotek (i, a[i]), z których można zbudować dict:

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

z innego konstruktora, trzeba

a = [51,27,13,56]   #given list 
d={i:x for i,x in enumerate(a)} 
print(d) 
+1

Zauważ, że ta składnia nie zadziała w Pythonie 2 –

+6

@StefanoSanfilippo Dict i ustawiona kompilacja zostały przeniesione do Pythona 2.7. – kevingessner

+0

Stoję poprawiony. Pamiętaj jednak, że nie dotyczy to poprzednich wersji Pythona 2. –

4
{x:a[x] for x in range(len(a))} 
1

Wystarczy użyć listowych.

a = [51,27,13,56] 
b = dict([ ((i,a[i]) for i in range(len(a)) ]) 
print b 
Powiązane problemy