defaultdict
"Das Standardwörterbuch enthält die Methode setdefault () zum Abrufen eines Werts und zum Festlegen eines Standardwerts, wenn der Wert nicht vorhanden ist. Im Gegensatz dazu kann defaultdict
der Aufrufer den Standardwert (den zurückzugebenden Wert) vorab angeben, wenn der Container initialisiert wird."
wie von Doug Hellmann in The Python Standard Library by Example definiert
Verwendung von defaultdict
Standarddict importieren
>>> from collections import defaultdict
Standarddict initialisieren
Initialisieren Sie es durch Übergeben
als erstes Argument aufrufbar (obligatorisch)
>>> d_int = defaultdict(int)
>>> d_list = defaultdict(list)
>>> def foo():
... return 'default value'
...
>>> d_foo = defaultdict(foo)
>>> d_int
defaultdict(<type 'int'>, {})
>>> d_list
defaultdict(<type 'list'>, {})
>>> d_foo
defaultdict(<function foo at 0x7f34a0a69578>, {})
** kwargs als zweites Argument (optional)
>>> d_int = defaultdict(int, a=10, b=12, c=13)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})
oder
>>> kwargs = {'a':10,'b':12,'c':13}
>>> d_int = defaultdict(int, **kwargs)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})
Wie funktioniert es
Wie eine untergeordnete Klasse des Standardwörterbuchs kann sie dieselben Funktionen ausführen.
Bei Übergabe eines unbekannten Schlüssels wird jedoch anstelle eines Fehlers der Standardwert zurückgegeben. Zum Beispiel:
>>> d_int['a']
10
>>> d_int['d']
0
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12, 'd': 0})
Wenn Sie den Standardwert ändern möchten, überschreiben Sie default_factory:
>>> d_int.default_factory = lambda: 1
>>> d_int['e']
1
>>> d_int
defaultdict(<function <lambda> at 0x7f34a0a91578>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0})
oder
>>> def foo():
... return 2
>>> d_int.default_factory = foo
>>> d_int['f']
2
>>> d_int
defaultdict(<function foo at 0x7f34a0a0a140>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0, 'f': 2})
Beispiele in der Frage
Beispiel 1
Da int als default_factory übergeben wurde, gibt jeder unbekannte Schlüssel standardmäßig 0 zurück.
Wenn der String nun in der Schleife übergeben wird, erhöht sich die Anzahl dieser Alphabete in d.
>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> d.default_factory
<type 'int'>
>>> for k in s:
... d[k] += 1
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
>>> d
defaultdict(<type 'int'>, {'i': 4, 'p': 2, 's': 4, 'm': 1})
Beispiel 2
Da eine Liste als default_factory übergeben wurde, gibt jeder unbekannte (nicht vorhandene) Schlüssel standardmäßig [] (dh Liste) zurück.
Wenn nun die Liste der Tupel in der Schleife übergeben wird, wird der Wert in d [Farbe] angehängt.
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> d.default_factory
<type 'list'>
>>> for k, v in s:
... d[k].append(v)
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
>>> d
defaultdict(<type 'list'>, {'blue': [2, 4], 'red': [1], 'yellow': [1, 3]})
default_factory = None
Sie es festlegen, nachdem Sie das Standarddiktat vollständig ausgefüllt haben. Siehe diese Frage .