python字典嵌套

class AutoVivification(dict):
    """实现perl的自动激活特征 : https://ask.helplib.com/python/post_229754
        a['city'] 实际上会调用类的 __getitem__(self,key)方法
        我们需要字典能够无穷嵌套
        那么久需要每一层的返回值都有__getitem__(self,key)方法
        但是最后一层需要字典原始的返回实体对象并赋值,无需__getitem__方法,所以需要继承dict的__getitem__方法
        继承 dict 字典类
    """
    def __getitem__(self, key):
        try:
            # 如果字典中有键key,返回value
            # 使用父类dict的__getitem__方法,如果失败(多层键索引),就except
            return dict.__getitem__(self, key)
        except KeyError:
            # 如果字典中无键 则生成键值对并返回值对象  a=b=c  c的值给b b的值给a

            # value = self[key] = type(self)()         #1              1,2,3三种效果相同
            # value = self[key] = AutoVivification()   #2
            self[key] = AutoVivification()             #3
            value = self[key]                          #3
        return value

a = AutoVivification()
a['provice']['city']['day'] = 4
a['name']['money'] = 5
a['name']['money1'] = 522
a['sd']['df']['test']['test1'] = 6
print(a)
print(a['sd']['df'])
'''
{'provice': {'city': {'day': 4}}, 'name': {'money': 5, 'money1': 522}, 'sd': {'df': {'test': {'test1': 6}}}}
{'test': {'test1': 6}}
'''

 

你可能感兴趣的:(python基础)