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})
Si vous ne savez pas quelle clé est donnée au type de dictionnaire, il arrive souvent que si la clé n'existe pas, elle soit initialisée avec foo et collections.defaultdict la remplit. Si vous faites defaultdict (int)
, il sera initialisé à 0 au premier accès comme ↑, mais qu'est-ce que cela signifie après tout?
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
Le processus est le même que celui-ci. Après tout, c'est bien si c'est une fonction sans arguments et renvoie une valeur. Par conséquent, il est assez facile de comprendre si vous utilisez lambda et faites quelque chose comme defaultdict (lambda: [])
. ** Addendum: Dans l'exemple de génération de cette liste vide, il est plus facile de lire en passant list () sans utiliser lambda. Un exemple légèrement plus compliqué ci-dessous où lambda doit être utilisé. ** **
Si vous développez l'exemple précédent, vous pouvez compter la fréquence d'apparition de chaque alphabet.
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 () lui-même renvoie également defaultdict, vous pouvez donc bien sûr utiliser defaultdict (defaultdict (lambda: {" name ":" null "," age ": 20}))
.
Recommended Posts