2010-09-09 1 views
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)) 

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

ответ

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)} 

(конечно, не забудьте use itertools.izip вместо zip в Python 2.x)

+0

Отлично, спасибо. Есть ли преимущество для итерационного подхода? – Ian

+0

IMHO, второй подход более Pythonic, но он читает читателя, не знакомого с Python. Но это все еще довольно круто. –