翻翻过去那场雪
这样会有一些问题.test["x"]["y"]相当于一个链式调用,先获取test["x"],再对["y"]这个key进行赋值,进行第一步的时候你无法获取后边是不是要进行赋值,你只能在每次getitem的时候都创建不存在的键.创建这个键究竟是什么类型的呢?默认是dict当然很好理解,但是如果他y的位置是一个整数,那要不要创建一个列表呢?这些你都要考虑清楚.最后是一个简单的实现.完全不考虑list的情况.# coding:utf-8class MyDict(dict):
# mydict 可还行
def __getitem__(self, a):
if not hasattr(self, a):
self[a] = MyDict() # 注意这个位置也要生成同样的类型
return super(MyDict, self).__getitem__(a)
test = MyDict()
test["a"]["b"]["c"] = 1print test# {'a': {'b': {'c': 1}}}我觉得这种简单的设计虽然用起来看似简单,但是局限性也是存在的,一定要小心使用这种trick.