比如原生的dict屬性test=dict()
test['a']=1 # 這個(gè)可以實(shí)現(xiàn)
test['x']['y']=2 # 這個(gè)就會(huì)報(bào)錯(cuò)我想生成一個(gè)遞歸字典,如果沒有這個(gè)鍵則創(chuàng)建,哪種方法能簡(jiǎn)潔點(diǎn),優(yōu)雅點(diǎn)~~多謝了
1 回答

翻翻過去那場(chǎng)雪
TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
這樣會(huì)有一些問題.test["x"]["y"]
相當(dāng)于一個(gè)鏈?zhǔn)秸{(diào)用,先獲取test["x"]
,再對(duì)["y"]這個(gè)key進(jìn)行賦值,進(jìn)行第一步的時(shí)候你無法獲取后邊是不是要進(jìn)行賦值,你只能在每次getitem的時(shí)候都創(chuàng)建不存在的鍵.
創(chuàng)建這個(gè)鍵究竟是什么類型的呢?默認(rèn)是dict當(dāng)然很好理解,但是如果他y的位置是一個(gè)整數(shù),那要不要?jiǎng)?chuàng)建一個(gè)列表呢?
這些你都要考慮清楚.
最后是一個(gè)簡(jiǎn)單的實(shí)現(xiàn).完全不考慮list的情況.
# coding:utf-8class MyDict(dict): # mydict 可還行 def __getitem__(self, a): if not hasattr(self, a): self[a] = MyDict() # 注意這個(gè)位置也要生成同樣的類型 return super(MyDict, self).__getitem__(a) test = MyDict() test["a"]["b"]["c"] = 1print test# {'a': {'b': {'c': 1}}}
我覺得這種簡(jiǎn)單的設(shè)計(jì)雖然用起來看似簡(jiǎn)單,但是局限性也是存在的,一定要小心使用這種trick.
添加回答
舉報(bào)
0/150
提交
取消