2017-03-21 2 views
3

J'ai un dictionnaire de listes, et il devrait être initialisé avec des clés par défaut. Je suppose que le code ci-dessous est pas bon (je veux dire, cela fonctionne, mais je ne pense pas qu'il est écrit de la manière pythonique):Comment initialiser defaultdict avec les clés?

d = {'a' : [], 'b' : [], 'c' : []} 

Je veux utiliser plus pythonique comme quelque chose defaultict: Cependant, chaque didacticiel que j'ai vu dynamiquement définit les nouvelles clés. Mais dans mon cas, toutes les clés doivent être définies dès le départ. J'analyse d'autres structures de données, et j'ajoute des valeurs à mon dictionnaire seulement si la clé spécifique dans la structure contient également dans mon dictionnaire.

Comment puis-je définir les clés par défaut?

+0

Voulez-vous des touches supplémentaires créées par la suite automatiquement ou avez-vous l'ensemble depuis le début? – tdelaney

+2

Si vous utilisez un defaultdict, pourquoi avez-vous besoin de définir les clés? Quel est le comportement que vous voulez, quel est le cas d'utilisation de cette structure de données? – jonrsharpe

+0

@tdelaney Je veux l'ensemble complet depuis le début. – Amir

Répondre

4

C'est déjà raisonnable, mais vous pouvez raccourcir un peu avec une compréhension dictée qui utilise une liste standard de clés.

>>> standard_keys = ['a', 'b', 'c'] 
>>> d1 = {key:[] for key in standard_keys} 
>>> d2 = {key:[] for key in standard_keys} 
>>> ... 
1

Si vous allez effectuer une pré-initialisation des listes vides, il n'y a pas besoin d'un defaultdict. Simple dict-compréhension obtient le travail fait clairement et proprement:

>>> {k : [] for k in ['a', 'b', 'c']} 
{'a': [], 'b': [], 'c': []} 
1

Vous pouvez avoir une fonction définie qui vous renvoie une dict avec touches de présélection.

def get_preset_dict(keys=['a','b','c'],values=None): 
    d = {} 
    if not values: 
     values = [[]]*len(keys) 
    if len(keys)!=len(values): 
     raise Exception('unequal lenghts') 
    for index,key in enumerate(keys): 
     d[key] = values[index] 

    return d 

Dans [8]: get_preset_dict()

Out [8]: {'a': [], 'b': [], 'c': []}

Dans [18]: get_preset_dict (touches = [ 'a', 'e', ​​» i », 'o', 'U'])

Out [18]: {'a': [], 'e': [], 'i': [], 'o': [], 'u': []}

Dans [19]: get_preset_dict(keys=['a','e','i','o','u'],values=[[1],[2,2,2],[3],[4,2],[5]])

Out [19]: {'a': [1], 'e': [2, 2, 2], 'i': [3], 'o': [4, 2], 'u': [5]}