PythonRecipe--易用型dict

这篇文章翻译自activecode的文章Wrist Friend Dictionary

这篇文章属于简书专题Python Recipe

这个字典让你可以更加简单的创建嵌套型数据结构,比如可以:

window.style.width = 5

或者可以:

window['background-color'].rgb = (255, 255, 255)

代码如下:

class easyaccessdict(dict):

    def __getattr__(self, name):
        if name in self:
            return self[name]
        n = easyaccessdict()
        super().__setitem__(name, n)
        return n
   
    def __getitem__(self, name):
        if name not in self:
            super().__setitem__(name, easyaccessdict())
        return super().__getitem__(name)

    def __setattr__(self, name, value):
        super().__setitem__(name, value)

示例:

>>> d = easyaccessdict()
>>> d
{}
>>> d.foo.bar = 'a'
>>> d
{'foo': {'bar': 'a'}}
>>> d['foo']
{'bar': 'a'}
>>> d['foo'].blah = 7
{'foo': {'bar': 'a', 'blah': 7}}
>>> # 甚至还可以这样
>>> d.a.b.c.e.e.f.g.h= 11

另外可以使用__missing__()来简化上面的代码实现(collections.defaultdict就是这样实现的):


class easyaccessdict(dict):
    def __getattr__(self, name):
        return self[name]
    def __setattr__(self, name, value):
        super().__setitem__(name,value)
    def __missing__(self, name):
        super().__setitem__(name, easyaccessdict())
        return super().__getitem__(name)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。