php中对数组的赋值可以很简单方便,比如:
$array = [];
$array['20161101']['age'] = 20;
$array['20161101']['num'] = 30;
print_r($array);
可以看到,直接进行多层级赋值是可以的,
但是当我使用python的时候,也想这样用:
item = {}
item['20161101']["age"] = 20
item['20161102']['num'] = 30
print item
结果是不行的,报错:KeyError
查了一下资料,知道python中的dict只能直接进行一层的赋值,不支持多层级直接赋值,
所以想问一下,有没有什么方法能够做到多层级赋值呢?
可以自己实现这个结构。
下面的例子中,AutoVivification 继承自 dict
我们可以这样子来使用AutoVivification:
输出:
补充,AutoVivification还有另一种实现方法,直接重载dict的
__missing__
魔术方法。当做扩展吧。再补充一个,Python2.5 之后的版本增加了
collections.defaultdict
类型,该类型可以自定义扩展性更强大的dict类型。文档中指出,其实现原理就是重载了
__missing__
方法。AutoVivification 也可以如是表达:defaultdict 构造了一个dict类型,其第一个参数是它的default_factory,当
__missing__
被调用时,使用default_factory 构造了返回值。更多defaultdict的例子