2010-02-11 5 views

Répondre

236

dict.fromkeys([1, 2, 3, 4])

Ceci est en fait un classmethod, il travaille pour les sous-classes dict-(comme collections.defaultdict) ainsi. Le deuxième argument facultatif spécifie la valeur à utiliser pour les clés (par défaut None.)

+77

Soyez prudent avec l'initialisation à quelque chose mutable: Si vous appelez, par exemple, 'dict.fromkeys ([1, 2, 3], [])', toutes les clés sont mappées à la même liste, et en modifier une les modifiera toutes. – charleslparker

44
dict.fromkeys(keys, None) 
+0

génial, je voulais des listes vides, '' dict.fromkeys (clés, []) '' – muon

+4

@muon Ce n'est presque certainement pas ce que vous voulez, voir [commentaire charleslparker] (http://stackoverflow.com/questions/2241891/comment-initialiser-un-dict-avec-keys-from-a-list-et-empty-value-in-python # comment25131847_2241904). – gerrit

+0

@gerrit quoi de la bonne façon alors, vous savez? – muon

6
d = {} 
for i in keys: 
    d[i] = None 
+1

Pourquoi Python lance-t-il une erreur comme: 'TypeError: 'type' object is iterable'? – FaCoffee

+1

@FrancescoCastellani Parce que 'list' est un type. Sauf si vous avez quelque chose comme 'list = []', la méthode ci-dessus vous donnera toujours la même erreur – smac89

139

personne ne se souciait de donner une solution dict-compréhension?

>>> keys = [1,2,3,5,6,7] 
>>> {key: None for key in keys} 
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None} 
+1

Cela fonctionne uniquement en Python 3.x –

+25

Je crois qu'il a été rétroporté à 2.7 – wim

+8

Ceci est agréable et ne souffre pas de la problème de référence que la réponse acceptée fait. – charleslparker

7
>>> keyDict = {"a","b","c","d"} 

>>> dict([(key, []) for key in keyDict]) 

Sortie:

{'a': [], 'c': [], 'b': [], 'd': []} 
+1

Bien que ce code puisse répondre à la question, en fournissant un contexte supplémentaire concernant _how_ et/ou _why_, il résout le problème pour améliorer la valeur à long terme de la réponse. –

+0

le nom 'keyDict' est trompeur, car la première ligne de code retourne un' set', pas un 'dict'. –

Questions connexes