2009-02-23 9 views
7

Y at-il une manière plus concise de faire cela en Python ?:Quelle est la façon Pythonienne de combiner deux séquences dans un dictionnaire?

def toDict(keys, values): 
    d = dict() 
    for k,v in zip(keys, values): 
    d[k] = v 

    return d 
+0

Avec les bonnes réponses que vous avez eues jusqu'à maintenant pour la technique, je ferai remarquer que 'to_dict' est plus Pythonic que 'toDict' quand on nomme une fonction. Voir [PEP 8] (http://www.python.org/dev/peps/pep-0008 "PEP 8") pour les recommandations de style pour l'écriture de code Python. – bignose

+0

+1 pour aider quelqu'un qui est clairement intéressé par le 'chemin'. – physicsmichael

+0

Merci pour le heads-up. Cependant, cela devrait plutôt appartenir à une question wikifiée, à l'instar de "Python coding style guidelines". – guillermooo

Répondre

4

Si keys 'la taille peut être plus grande, alors values' que vous pouvez ensuite utiliser itertools.izip_longest (Python 2.6) qui permet de spécifier une valeur par défaut pour le reste des clés:

from itertools import izip_longest 

def to_dict(keys, values, default=None): 
    return dict(izip_longest(keys, values, fillvalue=default)) 

Exemple:

>>> to_dict("abcdef", range(3), 10) 
{'a': 0, 'c': 2, 'b': 1, 'e': 10, 'd': 10, 'f': 10} 

REMARQUE: itertools.izip*() fonctions à la différence des itérateurs de retour de la fonction zip() pas de listes.

Questions connexes