Проблема с defaultdict
заключается в том, что если у вас есть словарь словарей, все подсловари также должны быть этого типа - раздражает, если вы получаете их откуда-то еще, например, из синтаксического анализа JSON.
Он также подвержен проблемам, связанным с «выстрелом себе в ногу», потому что очень легко забыть, что у вас есть defaultdict
, сделать что-то вроде a['hello']
и забыть, что это автоматически создаст там ценность.
Я не использовал defaultdict
годами. Вместо этого я использую dict.setdefault
, который дает любому словарю такую же функциональность и имеет дополнительное преимущество, заключающееся в том, что часть создания или доступа видна, когда это происходит, а не где-либо еще при создании коллекции.
Обратите внимание, что это не сработает, если создание элемента по умолчанию стоит дорого, но 9 раз из 10 я пишу d.getdefault(key, {})
, так что это не проблема.