Je voudrais tirer de ceci:
keys = [1,2,3]
pour ça:
{1: None, 2: None, 3: None}
Y a-t-il une façon de le faire pythonique?
C'est une façon laide de le faire:
>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(Zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}
dict.fromkeys([1, 2, 3, 4])
C'est en fait une méthode de classe, donc ça marche aussi pour les sous-classes dict (comme collections.defaultdict
). Le deuxième argument facultatif spécifie la valeur à utiliser pour les clés (par défaut, None
.)
personne ne s'est soucié de donner une solution de 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}
dict.fromkeys(keys, None)
>>> keyDict = {"a","b","c","d"}
>>> dict([(key, []) for key in keyDict])
Sortie:
{'a': [], 'c': [], 'b': [], 'd': []}
d = {}
for i in keys:
d[i] = None
Dans les flux de travaux many dans lesquels vous souhaitez associer une valeur par défaut/initiale pour des clés arbitraires, vous n'avez pas besoin de need pour hacher chaque clé individuellement à l'avance. Vous pouvez utiliser collections.defaultdict
. Par exemple:
from collections import defaultdict
d = defaultdict(lambda: None)
print(d[1]) # None
print(d[2]) # None
print(d[3]) # None
C'est plus efficace, cela évite d'avoir à hacher toutes vos clés lors de l'instanciation. De plus, defaultdict
est une sous-classe de dict
, il n'est donc généralement pas nécessaire de reconvertir en dictionnaire.
Pour les workflows où vous avez besoin de commandes sur les touches autorisées, vous pouvez utiliser dict.fromkeys
selon la réponse acceptée:
d = dict.fromkeys([1, 2, 3, 4])