2010-09-09 5 views
1

J'ai une liste [5, 90, 23, 12, 34, 89] etc. où chaque deux valeurs devrait être une liste (classée) dans le dictionnaire. Donc la liste ci-dessus deviendra {1: [5, 90], 2: [23, 12], 3: [34, 89]} etc. Je me suis rapproché de la compréhension de la liste mais je n'ai pas craqué il. J'ai essayé:Créer dict dicté avec la compréhension de la liste

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

Qui fonctionne pour la première clé, mais toutes les valeurs suivantes sont désactivées par un index. Comment ferais-tu ceci?

Répondre

6

Vous avez laissé un multiple de 2:

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

BTW, vous pouvez le faire à la place (avec Python ≥2.6 ou Python ≥3.0):

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

(bien sûr, souvenez-vous use itertools.izip au lieu de zip en Python 2.x)

+0

Parfait, merci. Y a-t-il un avantage à l'approche iter? – Ian

+0

IMHO, la deuxième approche est plus Pythonic, mais souffre de la lisibilité lorsqu'il est lu par quelqu'un qui ne connaît pas Python. Mais c'est quand même plutôt cool. –

Questions connexes