Creating a defaultdict with empty numpy array

zinjaai picture zinjaai · Jul 29, 2014 · Viewed 10k times · Source

I'm wondering if there's a more clever way to create a default dict from collections. The dict should have an empty numpy ndarray as default value.

My best result is so far:

import collections
d = collections.defaultdict(lambda: numpy.ndarray(0))

However, i'm wondering if there's a possibility to skip the lambda term and create the dict in a more direct way. Like:

d = collections.defaultdict(numpy.ndarray(0))  # <- Nice and short - but not callable

Answer

Martijn Pieters picture Martijn Pieters · Jul 29, 2014

You can use functools.partial() instead of a lambda:

from collections import defaultdict
from functools import partial

defaultdict(partial(numpy.ndarray, 0))

You always need a callable for defaultdict(), and numpy.ndarray() always needs at least one argument, so you cannot just pass in numpy.ndarray here.