84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
ringa_lee
可以自己实现这个结构。下面的例子中,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__魔术方法。当做扩展吧。
__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 也可以如是表达:
collections.defaultdict
item = defaultdict(dict) # 其实现与AutoVivification的实现完全一样 item['20161101']["age"] = 20 item['20161102']['num'] = 30 print item
defaultdict 构造了一个dict类型,其第一个参数是它的default_factory,当 __missing__被调用时,使用default_factory 构造了返回值。更多defaultdict的例子
我再附上defaultdict包的用法吧:
from collections import defaultdict item = defaultdict(dict) item['20161101']['age'] = 20 print item
输出:
defaultdict(<type 'dict'>, {'20161101': {'age': 20}})
这样就可以达到想要的效果了,
补充:defaultdict()接收一个默认参数,这个参数可以是类型名称,也可以是任何不带参数的可调用函数这个挺好用的
item = defaultdict(lambda:0) print item['num']
0
可以自己实现这个结构。
下面的例子中,AutoVivification 继承自 dict
我们可以这样子来使用AutoVivification:
输出:
补充,AutoVivification还有另一种实现方法,直接重载dict的
__missing__
魔术方法。当做扩展吧。再补充一个,Python2.5 之后的版本增加了
collections.defaultdict
类型,该类型可以自定义扩展性更强大的dict类型。文档中指出,其实现原理就是重载了
__missing__
方法。AutoVivification 也可以如是表达:defaultdict 构造了一个dict类型,其第一个参数是它的default_factory,当
__missing__
被调用时,使用default_factory 构造了返回值。更多defaultdict的例子
我再附上defaultdict包的用法吧:
输出:
这样就可以达到想要的效果了,
补充:
defaultdict()接收一个默认参数,这个参数可以是类型名称,也可以是任何不带参数的可调用函数
这个挺好用的
输出: