У меня есть список значений, и я хочу поместить их в словарь, который сопоставил бы каждое значение с его индексом.
Я могу сделать это так:
>>> 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}
Пожалуйста, поделитесь своими решениями,
Спасибо
ИЗМЕНИТЬ: Python 2.6.4
Для списков, содержащих 1000 элементов, версия dict (zip) является самой быстрой, версии генератора и понимания списка практически идентичны, и они примерно в 1,5 раза медленнее, а функциональная карта (перевернутая) значительно медленнее.
$ python -mtimeit -s "t = range (int (1e3))" "d = dict (zip (t, range (len (t))))"
1000 циклов, максимум 3: 277 мксек на цикл.
$ python -mtimeit -s "t = range (int (1e3))" "d = dict ([(y, x) for x, y in enumerate (t)])"
1000 циклов, лучшее из 3: 426 мксек на цикл
$ python -mtimeit -s "t = range (int (1e3))" "d = dict ((y, x) for x, y in enumerate (t))"
1000 циклов, лучшее из 3: 437 мкс. за петлю
$ python -mtimeit -s "t = range (int (1e3))" "d = dict (map (reversed, enumerate (t)))"
100 циклов, лучшее из 3: 3,66 мс на цикл.
Я пробовал проводить одни и те же тесты как для более длинных, так и для более коротких списков (1e2, 1e4, 1e5), и время на цикл линейно масштабируется с длиной списка.
Может ли кто-нибудь измерить версию Py 2.7+?