Eine Klasse hat einen Konstruktor, der einen Parameter akzeptiert:
class C(object):
def __init__(self, v):
self.v = v
...
Irgendwo im Code ist es nützlich, dass Werte in einem Diktat ihre Schlüssel kennen.
Ich möchte ein Standarddiktat mit dem Schlüssel verwenden, der an neugeborene Standardwerte übergeben wird:
d = defaultdict(lambda : C(here_i_wish_the_key_to_be))
Irgendwelche Vorschläge?
python
dictionary
defaultdict
Benjamin Nitlehoo
quelle
quelle
defaultdict
die__missing__()
Methode überschrieben werden kann (wie in jeder Unterklasse der integriertendict
Klasse seit Version 2.5).Nein, da ist kein.
Die
defaultdict
Implementierung kann nicht so konfiguriert werden, dass sie fehlendkey
an dendefault_factory
Standard übergeben wird. Sie können nur Ihre eigenedefaultdict
Unterklasse implementieren , wie oben von @JochenRitzel vorgeschlagen.Aber das ist nicht "klug" oder fast so sauber wie eine Standardbibliothekslösung (falls vorhanden). Somit lautet die Antwort auf Ihre prägnante Ja / Nein-Frage eindeutig "Nein".
Es ist schade, dass in der Standardbibliothek ein so häufig benötigtes Tool fehlt.
quelle
Ich glaube nicht, dass du
defaultdict
hier überhaupt brauchst . Warum nicht einfach diedict.setdefault
Methode anwenden?Das würde natürlich viele Instanzen von schaffen
C
. Falls es sich um ein Problem handelt, reicht meiner Meinung nach der einfachere Ansatz aus:defaultdict
Soweit ich sehen kann, wäre es schneller als die oder eine andere Alternative.ETA in Bezug auf die
in
Testgeschwindigkeit im Vergleich zur Verwendung der Try-Except-Klausel:quelle
d[key]
um zurückzukehren,d[key] = C(key)
wennkey not in d
. Aber Ihre Lösung erfordert, dass er tatsächlichd[key]
im Voraus voreingestellt wird ? Wie würde er wissen, waskey
er brauchen würde?Hier ist ein funktionierendes Beispiel für ein Wörterbuch, das automatisch einen Wert hinzufügt. Die Demonstrationsaufgabe beim Suchen doppelter Dateien in / usr / include. Beachten Sie, dass das benutzerdefinierte Wörterbuch PathDict nur vier Zeilen benötigt:
quelle