web-dev-qa-db-fra.com

Défini sur dict Python

existe-t-il un moyen Pythonic de convertir un ensemble en dict?

J'ai le set suivant

s = {1,2,4,5,6}

et je veux le dict suivant

c = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0}

avec une liste que vous feriez

a = [1,2,3,4,5,6]
b = []

while len(b) < len(a):
   b.append(0)

c = dict(itertools.izip(a,b))
37
Sven Bamberger

Utilisez dict.fromkeys() :

c = dict.fromkeys(s, 0)

Démo:

>>> s = {1,2,4,5,6}
>>> dict.fromkeys(s, 0)
{1: 0, 2: 0, 4: 0, 5: 0, 6: 0}

Cela fonctionne également pour les listes; c'est la méthode la plus efficace pour créer un dictionnaire à partir d'une séquence. Notez que toutes les valeurs sont des références à celle par défaut que vous avez passée dans dict.fromkeys(), donc soyez prudent lorsque cette valeur par défaut est un objet modifiable.

72
Martijn Pieters

Outre la méthode donnée par @ Martijn Pieters , vous pouvez également utiliser une compréhension de dictionnaire comme celle-ci:

s = {1,2,4,5,6}
d = {e:0 for e in s}

Cette méthode est plus lente que dict.fromkeys (), mais elle vous permet de définir les valeurs du dict sur tout ce dont vous avez besoin, au cas où vous ne voudriez pas toujours que ce soit zéro.

Vous pouvez également l'utiliser pour créer des listes, les compréhensions de listes sont plus rapides et plus Pythonic que la boucle que vous avez dans votre question. Vous pouvez en savoir plus sur les compréhensions ici: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

16
papirrin

C'est aussi une autre façon de faire

s = {1,2,3,4,5}
dict([ (elem, 0) for elem in s ])
6
asit_dhal