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


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) , и значение , полученные из итерации по последовательности :


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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.