Один лайнер: создание словаря из списка с индексами в качестве ключей

91

Я хочу создать словарь из заданного списка всего в одной строке . Ключи словаря будут индексами, а значения - элементами списка. Что-то вроде этого:

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

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

print(d)

Выход:

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

У меня нет особых требований относительно того, почему мне нужна одна строка. Я просто изучаю Python и задаюсь вопросом, возможно ли это.

Наваз
источник
3
Как вы думаете, какое преимущество вы получите от этого словаря? Поиск по индексу со словарем не ускорится.
Мартейн Питерс
@MartijnPieters: Ну, мне может понадобиться, например, это: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz
3
затем просто использовать zip(): dict(zip(x, a)).
Мартейн Питерс

Ответы:

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

будет производить

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

enumerate(sequence, start=0)

Вернуть перечисляемый объект. Последовательность должна быть последовательностью, итератором или каким-либо другим объектом, поддерживающим итерацию. next()Метод итератора , возвращенного enumerate()возвращает tupleсодержащий отсчет (от начала который по умолчанию 0) , и значение , полученные из итерации по последовательности :

glglgl
источник
2
@jamylak Но твое удалять не надо. Люди могли узнать о count()...
glglgl
50

С другим конструктором у вас есть

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)
кирилов
источник
7
@StefanoSanfilippo Dict и понимание множеств были перенесены в Python 2.7.
Кевингесснер
Я исправился. Тем не менее, помните, что это не относится к предыдущим версиям Python 2.
Стефано Санфилиппо
15

Попробуйте enumerate: он вернет список (или итератор) кортежей (i, a[i]), из которых вы можете построить dict:

a = [51,27,13,56]  
b = dict(enumerate(a))
print b
Стефано Санфилиппо
источник
13
{x:a[x] for x in range(len(a))}
Эмилио М. Бумачар
источник
3

Просто используйте понимание списка.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Шахрукх Кхан
источник