Backgroud Wert von nicht vorhandenen Schlüssel erstellen mit einer Funktion:Wie automatisch
Lassen Sie uns sagen, dass ich eine Funktion haben (natürlich in der Realität, die eine komplexere Funktion wäre):
def f(x):
return str(x)
wenn ich will, Werte speichern unnötige erneute Berechnung zu vermeiden, kann ich eine dict
wie folgt erstellen:
my_dict = {x: f(x) for x in range(5)}
Aber dann, wenn ich tun nicht im Voraus wissen, welche Werte ich brauche, zum Beispiel 10
, my_dict[10]
erzeugt offensichtlich eine KeyError
.
Ein Weg, um dies könnte sein:
my_dict = {}
def get_value(x):
if x not in my_dict:
my_dict[x] = f(x)
return my_dict[x]
get_value(10)
Frage: Dies zu defaultdict
sehr ähnlich scheint: Gibt es einen Weg, um die intuitive (aber gebrochen) my_dict = defaultdict(f)
Arbeit, das heißt zu machen, wenn ein Schlüssel x
existiert nicht, sollte es f(x)
statt f()
anrufen, um den Standardwert zu erstellen?
'UserDict' ist nur in Python 2 notwendig.Bei Verwendung von Python 3 ist es möglich, direkt von dict 'class MyDict (dict) zu erben:' – robru
'von Sammlungsimport UserDict' funktioniert nicht für mich (entweder' Kein Modul namens collection' (statt 'collections'?) Oder 'kann den Namen UserDict' nicht importieren, aber die Verwendung von'dict' als Basis für' MyDict' funktioniert gut! – Julien
den Tippfehler, 'collection' in' collections' behoben;] – Leonard2