2017-03-21 5 views
3

Ich habe ein Wörterbuch von Listen, und es sollte mit Standardschlüsseln initialisiert werden. Ich denke, Sie den Code unten ist nicht gut (ich meine, es funktioniert, aber ich fühle mich nicht, dass es in der pythonic Art und Weise geschrieben):Wie initialisiert defaultdict mit Schlüsseln?

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

Also habe ich etwas mehr pythonic wie defaultict verwenden möchten:

d = defaultdict(list) 

Jedes Tutorial, das ich gesehen habe, setzt dynamisch die neuen Schlüssel. Aber in meinem Fall sollten alle Schlüssel von Anfang an definiert werden. Ich analysiere andere Datenstrukturen, und ich füge Werte zu meinem Wörterbuch nur hinzu, wenn spezifischer Schlüssel in der Struktur auch in meinem Wörterbuch enthält.

Wie kann ich die Standardschlüssel einstellen?

+0

Haben Sie zusätzliche Schlüssel wollen später automatisch erstellt oder haben Sie den vollen Satz von Anfang an haben? – tdelaney

+2

Wenn Sie ein Standarddict verwenden, warum müssen Sie die Schlüssel festlegen? Was ist das gewünschte Verhalten, was ist der Anwendungsfall für diese Datenstruktur? – jonrsharpe

+0

@tdelaney Ich möchte das gesamte Set von Anfang an. – Amir

Antwort

4

Das ist schon vernünftig, aber Sie können das mit einem Diktatverständnis, das eine Standardliste von Schlüsseln verwendet, etwas verkürzen.

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

Wenn du gehst zu leeren Listen vorab zu initialisieren, gibt es keine Notwendigkeit für eine defaultdict. Einfache dict-Verständnis wird die Arbeit klar und sauber gemacht:

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

Sie können eine Funktion definiert haben, die Ihnen eine dict mit Preset-Tasten zurückkehren wird.

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 

In [8]: get_preset_dict()

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

In [18]: get_preset_dict (Schlüssel = [ 'a', 'E',‘ i‘, 'o', 'u'])

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

In [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]}

Verwandte Themen