python 字典赋值_如何为一个dict字典进行多层级赋值?

可以自己实现这个结构。

下面的例子中,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的例子

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值