У меня есть список значений, и я хочу поместить их в словарь, который будет отображать каждое значение в его индекс.pythonic способ связать элементы списка с их индексами
я могу сделать это таким образом:
>>> t = (5,6,7)
>>> d = dict(zip(t, range(len(t))))
>>> d
{5: 0, 6: 1, 7: 2}
это не плохо, но я искал что-то более элегантное.
Я наткнулся на следующем, но он делает противоположное тому, что мне нужно:
>>> d = dict(enumerate(t))
>>> d
{0: 5, 1: 6, 2: 7}
Пожалуйста, поделитесь своим решением,
Спасибо
EDIT: Python 2.6.4
Для списков, содержащих 1000 элементов, версия dict (zip) является самой быстрой версией, генератор и версии для ознакомления с списком практически идентичны, и они равны ~ 1,5 раза медленнее, а функциональная карта (обратная) значительно медленнее.
$ питон -mtimeit -s "т = диапазон (интермедиат (1e3))" "d = ДИКТ (застежка-молния (т, диапазон (Len (т))))"
1000 петель, лучше всего из 3: 277 мксек на петле
$ питона -mtimeit -s "т = диапазон (интермедиат (1e3))" "d = ДИКТ ([(у, х) при х, у в Перечислим (т)])"
1000 петли, наилучшее из 3: 426 usec за цикл
$ python -mtimeit -s "t = range (int (1e3))" "d = dict ((y, x) для x, y в перечислении (t)) "
1000 петель, лучше всего 3: 437 шт. В петле
$ питона -mtimeit -s "т = диапазон (интермедиат (1e3))" "d = ДИКТ (отображение (обратное, перечислить (т)))"
100 петель, лучше всего 3: 3,66 мс в петле
Я попытался выполнить те же тесты дольше и для более коротких списков (1e2, 1e4, 1e5), а время на цикл равномерно линейно с длиной списка.
Может ли кто-нибудь раз вывести версию 2.7+?
Мне любопытно - какая из реализаций выполняется быстрее? Кстати, Chewy, какую версию Python вы используете? –