У меня есть список значений, и я хочу поместить их в словарь, который сопоставит каждое значение с его индексом.
Я могу сделать это так:
>>> 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) для x, y в перечислении (t)])"
1000 петель, лучшее из 3: 426 мксек на петлю
$ python -mtimeit -s "t = range (int (1e3))" "d = dict ((y, x) для x, y в перечислении (t))"
1000 петель, лучшее из 3: 437 усек за петлю
$ python -mtimeit -s "t = range (int (1e3))" "d = dict (map (инвертировано, перечислить (t)))"
100 циклов, лучшее из 3: 3,66 мсек на цикл
Я попытался запустить одни и те же тесты для более длинных и более коротких списков (1e2, 1e4, 1e5), и время цикла увеличивается линейно с длиной списка.
Может ли кто-нибудь рассчитать версию py 2.7+?