将字典转换为对象(或复制到本地对象var)

时间:2014-12-28 13:31:23

标签: python object dictionary web2py

我想重用别人写的一些代码。

代码是对象数组及其属性的长迭代。数据来自内置函数。

我通过ajax(作为JSON)提供相同的数据结构,因此python(web2py)将其转换为dict。

为了不断使用相同的长代码,我需要一种方法将当前元素从字典转换为对象。

原因:属性写为Obj.prop而不是Obj["prop"]

怎么做?

4 个答案:

答案 0 :(得分:5)

class ObjectDict(dict):
    """
    Object like dict, every dict[key] can be visited by dict.key
    """

    def __getattr__(self, name):
        return self.__getitem__(name)

答案 1 :(得分:3)

web2py包含具有此行为的Storage类。

from gluon.storage import Storage
mystorage = Storage(dict(key1=1, key2=2))
mystorage.key1

一些web2py API对象是Storage个对象(例如requestresponsesession)。

答案 2 :(得分:2)

有一个包正是这个叫做attrdict(我正在使用它没有任何问题): https://pypi.python.org/pypi/attrdict/1.2.0

示例(从attrdict doc复制):

>>> from attrdict import AttrDict
>>> a = AttrDict({'foo': 'bar'})
>>> a.foo
'bar'
>>> a['foo']
'bar'

使用它的一个好处是,不平坦的字典也可以工作(只要你总是通过属性访问,而不是使用标准的dict语法):

>>> a = AttrDict({'foo': {'bar': 'baz'}})
>>> a.foo.bar
'baz'

答案 3 :(得分:1)

使用Bunch类。周围有各种食谱,pydanny's看起来不错。