Я думаю, что его лучше использовать вместо оператора case switch. Представьте себе, если у нас есть инструкция переключения регистра, как показано ниже:
option = 1
switch(option) {
case 1: print '1st option'
case 2: print '2nd option'
case 3: print '3rd option'
default: return 'No such option'
}
В python нет switch
операторов case. Мы можем достичь того же, используя defaultdict
.
from collections import defaultdict
def default_value(): return "Default Value"
dd = defaultdict(default_value)
dd[1] = '1st option'
dd[2] = '2nd option'
dd[3] = '3rd option'
print(dd[4])
print(dd[5])
print(dd[3])
Он печатает:
Default Value
Default Value
3rd option
В приведенном выше фрагменте dd
не имеет ключей 4 или 5 и, следовательно, выводит значение по умолчанию, которое мы настроили в вспомогательной функции. Это гораздо лучше, чем необработанный словарь, в котором выдается KeyError
, если ключа нет. Из этого очевидно, что defaultdict
больше похоже на оператор регистра переключателя, где мы можем избежать сложных if-elif-elif-else
блоков.
Еще один хороший пример, который очень впечатлил меня с этого сайта :
>>> from collections import defaultdict
>>> food_list = 'spam spam spam spam spam spam eggs spam'.split()
>>> food_count = defaultdict(int) # default value of int is 0
>>> for food in food_list:
... food_count[food] += 1 # increment element's value by 1
...
defaultdict(<type 'int'>, {'eggs': 1, 'spam': 7})
>>>
Если мы попытаемся получить доступ к любым элементам, кроме eggs
и spam
, мы получим счетчик 0.