2010-10-06 5 views

Répondre

153

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

Python 2.7 et supérieur prend également en charge les compréhensions dict. Cette syntaxe est {el:0 for el in a}.

+1

generator expressions éviter la surcharge de la mémoire de peupler toute la liste. –

+14

Vous devriez probablement promouvoir ce commentaire dans votre réponse actuelle. En outre, depuis Python 2.7 et Python 3, vous pouvez faire '{el: 0 pour el dans a}'. (N'hésitez pas à ajouter cela dans votre réponse.) – Zooba

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

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

6

En plus de la réponse de Tim, qui est très approprié à votre exemple précis, il convient de mentionner collections.defaultdict, qui vous permet de faire des trucs comme ça:

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

Pour la cartographie [1, 2, 3, 4] comme dans votre exemple, il est un poisson hors de l'eau. Mais selon la raison pour laquelle vous avez posé la question, cela peut s'avérer être une technique plus appropriée.

86
d = dict.fromkeys(a, 0) 

a est la liste, 0 est la valeur par défaut. Veillez à ne pas définir la valeur par défaut sur un objet mutable (liste ou dict), car il s'agira d'un objet utilisé comme valeur pour chaque clé du dictionnaire (vérifiez here pour une solution dans ce cas). Les nombres/chaînes sont sûrs.

+11

la seule façon pythonique. – SilentGhost

+1

Cela semble être plus propre (pour moi au moins), comment cela se compare-t-il à celui de Tim? – blahster

+1

La solution de Tim fonctionne pour toutes les valeurs par défaut (vous pouvez initialiser le dictionnaire avec une liste vide ou un objet datetime ou quoi que ce soit). Dans ma solution, vous ne pouvez l'initialiser qu'avec des objets immuables (int/float, string, ...). C'est plus pythonique pour votre cas (la valeur par défaut est 0) et très probablement c'est aussi plus rapide. – eumiro

7

Dans la version python> = 2.7 et Python 3:

d = {el:0 for el in a} 
Questions connexes