Создать ранжированный диктат со списком

1

У меня есть список [5, 90, 23, 12, 34, 89] и т.д., где каждые два значения должны быть (ранжированным) списком в словаре.

Таким образом, приведенный выше список станет {1: [5, 90], 2: [23, 12], 3: [34, 89]} и т.д. Я подошел вплотную со списком, но не взломал его, Я пробовал:

my_list = [5, 90, 23, 12, 34, 89]
my_dict = dict((i+1, [my_list[i], my_list[i+1]]) for i in xrange(0, len(my_list)/2))

Что работает для первого ключа, но все следующие значения отключены одним индексом. Как вы это сделаете?

Теги:
list-comprehension

1 ответ

6
Лучший ответ

Вы оставили кратное 2:

dict( (i+1, my_list[2*i : 2*i+2]) for i in xrange(0, len(my_list)/2) )
#                   ^

Кстати, вы можете сделать это вместо этого (с Python ≥2.6 или Python ≥3.0):

>>> it = iter(my_list)
>>> dict(enumerate(zip(it, it), start=1))
{1: (5, 90), 2: (23, 12), 3: (34, 89)}

(конечно, запомните используйте itertools.izip вместо zip в Python 2.x)

  • 0
    Отлично спасибо. Есть ли преимущество у этого подхода?
  • 0
    ИМХО, второй подход более Pythonic, но страдает читабельностью при чтении кем-то, кто не знаком с Python. Но это все еще довольно круто.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню