writing pickle function

Gerard Flanagan grflanagan at gmail.com
Fri Jan 23 14:10:39 EST 2009


On Jan 23, 2:48 pm, perfr... at gmail.com wrote:
> hello,
>
> i am using nested defaultdict from collections and i would like to
> write it as a pickle object to a file. when i try:
>
> from collections import defaultdict
> x = defaultdict(lambda: defaultdict(list))
>
> and then try to write to a pickle file, it says:
>
> TypeError: can't pickle function objects
>
> is there a way around this? it's simply a dictionary that i want to
> write to file.. this works no problems with ordinary dicts.
>
> thank you.


One way via a subclass:

(from memory)

class MyCollection(defaultdict):

    def __init__(self):
        defaultdict.__init__(self, list)

    def __reduce__(self):
        return (MyCollection, (), None, None, self.iteritems())

and if you are so inclined (nothing to do with pickling):

    __setattr__ = defaultdict.__setitem__
    __getattr__ = defaultdict.__getitem__

G.



More information about the Python-list mailing list