1504 votes

Comment convertir deux listes en un dictionnaire ?

Imaginez que vous disposez de la liste suivante.

keys = ['name', 'age', 'food']
values = ['Monty', 42, 'spam']

Quelle est la manière la plus simple de produire le dictionnaire suivant ?

a_dict = {'name': 'Monty', 'age': 42, 'food': 'spam'}

2545voto

Dan Points 18831

Comme ça :

keys = ['a', 'b', 'c']
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print(dictionary) # {'a': 1, 'b': 2, 'c': 3}

Voila :-) L'analyse par paire dict constructeur et zip fonction sont terriblement utiles.

13 votes

Il convient de noter que dictionary = {zip(keys, values)} ne fonctionnera pas. Vous devez déclarer explicitement comme dict(...)

18 votes

Je ne sais pas pourquoi vous vous attendez à ce que ce soit le cas, @FernandoWittmann. {thing} est un sucre syntaxique permettant de construire un set() contenant un élément. {*iterable} est un sucre syntaxique permettant de construire un set contenant plusieurs éléments. {k:v} o {**mapping} sera construire un dict mais c'est syntaxiquement très différent.

10 votes

Merci pour le commentaire Dan. Vous avez raison. Ma confusion s'est produite parce que j'utilise habituellement le sintax {} pour les dictionnaires. En fait, si nous essayons type({}) le résultat est dict . Mais en effet, si nous essayons type({thing}) alors la sortie est set .

132voto

Mike Davis Points 541

Essayez ça :

>>> import itertools
>>> keys = ('name', 'age', 'food')
>>> values = ('Monty', 42, 'spam')
>>> adict = dict(itertools.izip(keys,values))
>>> adict
{'food': 'spam', 'age': 42, 'name': 'Monty'}

Dans Python 2, il est également plus économique en termes de consommation de mémoire par rapport à zip .

20 votes

Vrai pour Python2, mais dans Python 3, zip est déjà économique en termes de consommation de mémoire. docs.python.org/3/library/functions.html#zip En fait, vous pouvez voir que six utilise zip dans Python 3 pour remplacer itertools.izip dans Python 2 pythonhosted.org/six .

37voto

iny Points 3925
>>> keys = ('name', 'age', 'food')
>>> values = ('Monty', 42, 'spam')
>>> dict(zip(keys, values))
{'food': 'spam', 'age': 42, 'name': 'Monty'}

31voto

Brendan Berg Points 1024

Vous pouvez également utiliser les compréhensions de dictionnaire dans Python 2.7 :

>>> keys = ('name', 'age', 'food')
>>> values = ('Monty', 42, 'spam')
>>> {k: v for k, v in zip(keys, values)}
{'food': 'spam', 'age': 42, 'name': 'Monty'}

15voto

J.F. Sebastian Points 102961

Si vous avez besoin de transformer des clés ou des valeurs avant de créer un dictionnaire, alors un fichier expression de générateur pourrait être utilisé. Exemple :

>>> adict = dict((str(k), v) for k, v in zip(['a', 1, 'b'], [2, 'c', 3])) 

Jetez un coup d'œil Codez comme un pythoniste : Python idiomatique .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X