2009-08-05 7 views
6

J'ai trois listes, la première est une liste de noms, la seconde est une liste de dictionnaires et la troisième est une liste de données. Chaque position dans une liste correspond aux mêmes positions dans les autres listes. List_1 [0] a les données correspondantes dans List_2 [0] et List_3 [0], etc. Je voudrais transformer ces trois listes en un dictionnaire dans un dictionnaire, avec les valeurs dans List_1 étant les clés primaires. Comment puis-je faire cela tout en gardant tout en ordre?Concaténation de dictionnaires

Répondre

13
>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> c = [7,8,9] 
>>> dict(zip(a, zip(b, c))) 
{1: (4, 7), 2: (5, 8), 3: (6, 9)} 

Voir la documentation pour plus d'informations sur zip. Comme le souligne le lionbest ci-dessous, vous pouvez regarder itertools.izip() si vos données d'entrée sont grandes. izip fait essentiellement la même chose que zip, mais il crée des itérateurs au lieu de listes. De cette façon, vous ne créez pas de grandes listes temporaires avant de créer le dictionnaire.

+5

Si a, b, c sera énorme, je recommande izip du module itertools. – Arpegius

+0

@lionbest: Bon point, j'ai ajouté ça. – balpha

1

Python 3:

combined = {name:dict(data1=List_2[i], data2=List_3[i]) for i, name in enumerate(List_1)} 

Python 2.5: si l'ordre de ces questions de choses, vous ne devriez pas utiliser un dictionnaire

combined = {} 
for i, name in enumerate(List_1): 
    combined[name] = dict(data1=List_2[i], data2=List_3[i]) 
0

. par définition, ils sont non ordonnés. vous pouvez utiliser l'un des many ordered_dictionary implementations flottant autour, ou attendre python 2.7 ou 3.1 qui inclura une implémentation de dictionnaire ordonnée dans le module de collections.

Questions connexes