import collections
word_count = collections.defaultdict(int)
for word in ["foo", "bar", "foo", "foobar"]:
word_count[word] += 1
print word_count
# >>> defaultdict(<type 'int'>, {'foobar': 1, 'foo': 2, 'bar': 1})
Wenn Sie nicht wissen, welcher Schlüssel dem Wörterbuchtyp zugewiesen ist, wird der Schlüssel häufig mit foo initialisiert und von collection.defaultdict ausgefüllt, wenn er nicht vorhanden ist. Wenn Sie defaultdict (int)
ausführen, wird es beim ersten Zugriff wie ↑ auf 0 initialisiert, aber was bedeutet das schließlich?
import collections
word_count = {}
for word in ["foo", "bar", "foo", "foobar"]:
if not word in word_count:
word_count[word] = int()
word_count[word] += 1
print word_count
Der Prozess ist der gleiche wie dieser. Immerhin ist es in Ordnung, wenn es sich um eine Funktion ohne Argumente handelt und einen Wert zurückgibt. Daher ist es ziemlich einfach zu verstehen, ob Sie Lambda verwenden und so etwas wie "defaultdict (lambda: [])" ausführen. ** Nachtrag: Im Beispiel zum Generieren dieser leeren Liste ist das Lesen durch Übergeben von list () ohne Verwendung von Lambda einfacher. Ein etwas komplizierteres Beispiel unten, wo Lambda verwendet werden sollte. ** ** **
Wenn Sie das vorherige Beispiel entwickeln, können Sie die Häufigkeit des Auftretens jedes Alphabets zählen.
import collections
word_count = collections.defaultdict(lambda: [0 for i in range(26)])
for word in ["foo", "bar", "foo", "foobar"]:
for chara in word:
word_count[word][ord(chara)-ord("a")] += 1
print word_count
# >defaultdict(<function <lambda> at 0x10e5147d0>, {'foobar': [1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 'foo': [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'bar': [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]})
defaultdict () selbst gibt auch defaultdict zurück, so dass Sie natürlich defaultdict (defaultdict (lambda: {" name ":" null "," age ": 20}))
.