Один лайнер: створення словника зі списку з індексами як клавішами


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}.
Наваз

3
потім просто використовувати zip(): dict(zip(x, a)).
Мартін Пітерс

Відповіді:


158
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

@glglgl Має бути один спосіб це зробити;)
jamylak

побив мене на 2 хвилини :)
jcr

48

У вас є інший конструктор

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)

7
@StefanoSanfilippo Dict та розуміння наборів були повернуті до Python 2.7.
kevingessner

Я стою виправлений. Проте пам’ятайте, що це не стосується попередніх версій Python 2.
Стефано Санфіліппо

14

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

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


3

Просто використовуйте розуміння списку.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.