Dictionary with additional attributes

Santoso Wijaya santoso.wijaya at gmail.com
Tue Feb 22 23:19:36 CET 2011


Instead of inheriting a dict, why not composing a dict into your "model"
class, like:

    class Model(object):
        def __init__(self, *args, **kwargs):
            self._probabilities = defaultdict(lambda: defaultdict(float))

        @property
        def features(self):
            # insert your favorite algorithm to retrieve the set of all
features

~/santa


On Tue, Feb 22, 2011 at 11:49 AM, goodman <goodman.m.w at gmail.com> wrote:

> Hi, my question is this: Is it a bad idea to create a wrapper class
> for a dictionary so I can add attributes? E.g.:
>
> class DictWithAttrs(dict):
>    pass
>
> More information:
> I'm using a nested defaultdict to store a machine-learning model,
> where the first key is a class, the second key is a feature, and the
> value is a probability for the pair. For example:
>
> model = defaultdict(lambda: defaultdict(float))
>
> This works quite well, but now I would like to keep track of the set
> of all features within the model. While I can get the set of classes
> by model.keys(), for the features I would have to do something like
> set(feat for cls in model for feat in model[cls]). Rather than do
> something like:
>
> model['__features__'] = set(feat for cls in model for feat in
> model[cls])
>
> It seems less hackish to put it in an attribute, since that wouldn't
> potentially collide with an actual key in the model:
>
> model.features = set(feat for cls in model for feat in model[cls])
>
> Note that I'm not asking to access dictionary key/values by means of
> attributes, but have additional attributes. I'm looking for best, or
> common, practice for this sort of thing.
>
> Thanks!
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20110222/770e7c3f/attachment.html>


More information about the Python-list mailing list