web-dev-qa-db-fra.com

Comment créer un dictionnaire avec les clés d'une liste et les valeurs par défaut de (disons) zéro?

J'ai a = [1,2,3,4] et je veux d = {1:0, 2:0, 3:0, 4:0}

d = dict(Zip(q,[0 for x in range(0,len(q))]))

fonctionne mais est moche. Qu'est-ce qu'un moyen plus propre?

130
blahster

dict((el,0) for el in a) fonctionnera bien.

Python 2.7 et les versions ultérieures prennent également en charge la compréhension de dict. Cette syntaxe est {el:0 for el in a}.

193
Tim McNamara
d = dict.fromkeys(a, 0)

a est la liste, 0 est la valeur par défaut. Faites attention à ne pas définir la valeur par défaut sur un objet mutable (liste ou dict), car ce sera un objet utilisé comme valeur pour chaque clé du dictionnaire (cochez la case ici pour une solution dans ce cas). ). Les chiffres et les chaînes sont en sécurité.

149
eumiro

Dans python version> = 2.7 et dans python 3:

d = {el:0 for el in a}
10
Andrey

En plus de la réponse de Tim, qui convient parfaitement à votre exemple spécifique, il convient de mentionner collections.defaultdict , qui vous permet d'effectuer des tâches comme celles-ci:

_>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}
_

Pour mapper _[1, 2, 3, 4]_ comme dans votre exemple, il s’agit d’un poisson hors de l’eau. Mais selon la raison pour laquelle vous avez posé la question, cette technique pourrait s'avérer plus appropriée.

8
intuited
d = dict([(x,0) for x in a])

** modifier La solution de Tim est préférable car elle utilise des générateurs voir le commentaire à sa réponse.

3
GWW