Mam listę wartości i chcę umieścić je w słowniku, który odwzorowałby każdą wartość na jej indeks.Pythonowy sposób powiązania elementów listy z ich indeksami
mogę zrobić to w ten sposób:
>>> t = (5,6,7)
>>> d = dict(zip(t, range(len(t))))
>>> d
{5: 0, 6: 1, 7: 2}
to nie jest zły, ale szukam czegoś bardziej eleganckiego.
Natknąłem Poniżej, ale robi przeciwieństwo tego, czego potrzebuję:
>>> d = dict(enumerate(t))
>>> d
{0: 5, 1: 6, 2: 7}
Proszę podzielić się rozwiązania,
Dziękuję
EDIT: Python 2.6.4
W przypadku list zawierających 1000 elementów wersja dykt (zip) jest najszybsza, wersje generatora i wersji zrozumiałej są praktycznie identyczne i mają wartość ~ 1,5 razy wolniej, a mapa funkcjonalna (odwrócona) jest znacznie wolniejsza.
$ pyton -mtimeit -s "t = Range (int (1e3))", "d = DICT (ZIP (t, zakres (len (t))))"
1000 pętle, najlepiej 3: 277 mikrosekund każdej pętli
$ pyton -mtimeit -s "t = Range (int (1e3))", "d = DICT ([(r x) dla x, Y, w enumerate (t)])"
1000 pętle, najlepiej z 3: 426 użycia w pętli
$ python -mtimeit -s "t = zakres (int (1e3))" "d = dict ((y, x) dla x, y w wyliczeniu (t)) "
1000 pętli, najlepiej od 3: 437 przy użyciu pętli
$ python -mtimeit -s "t = zakres (int (1e3))" "d = dict (map (odwrócone, wyliczone (t)))"
100 pętli, najlepiej 3: 3,66 ms na pętlę
Próbowałem uruchomić te same testy dla dłuższych i krótszych list (1e2, 1e4, 1e5), a czas na pętlę skaluje się liniowo wraz z długością listy.
Czy ktoś może skorzystać z wersji py 2.7+?
Jestem ciekawy - które z wdrożeń jest szybsze? Przy okazji, Chewy, której wersji Pythona używasz? –