python - 如何为一个dict字典进行多层级赋值?
ringa_lee
ringa_lee 2017-04-18 10:07:26
0
2
1357
ringa_lee
ringa_lee

ringa_lee

reply all(2)
大家讲道理

可以自己实现这个结构。
下面的例子中,AutoVivification 继承自 dict

class AutoVivification(dict):
    """Implementation of perl's autovivification feature."""
    def __getitem__(self, item):
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            value = self[item] = type(self)()
            return value
            

我们可以这样子来使用AutoVivification:

item = AutoVivification()
item['20161101']["age"] = 20
item['20161102']['num'] = 30
print item

输出:

{'20161101': {'age': 20}, '20161102': {'num': 30}}

补充,AutoVivification还有另一种实现方法,直接重载dict的__missing__魔术方法。当做扩展吧。

class AutoVivification(dict):
    """Implementation of perl's autovivification feature."""
    def __missing__(self, key):
        value = self[key] = type(self)()
        return value
        

再补充一个,Python2.5 之后的版本增加了 collections.defaultdict 类型,该类型可以自定义扩展性更强大的dict类型。
文档中指出,其实现原理就是重载了 __missing__ 方法。AutoVivification 也可以如是表达:

item = defaultdict(dict)  # 其实现与AutoVivification的实现完全一样
item['20161101']["age"] = 20
item['20161102']['num'] = 30
print item

defaultdict 构造了一个dict类型,其第一个参数是它的default_factory,当 __missing__被调用时,使用default_factory 构造了返回值。
更多defaultdict的例子

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!