好了,所以我建立我自己的變量處理程序通過數據[關鍵]訪問數據時具有__getitem__
功能的使用,它除了試圖訪問項目的鏈接時的偉大工程試圖訪問一個不存在的子鍵時,Python只是返回一個KeyError而不打印「子鍵」,爲什麼會這樣?我怎樣才能讓Python打印出我實際上想要得到的東西?Python - 詞典 - 修改__getitem__?</p> <pre><code>data["key"]["subkey"] def __getitem__(self, key, **args): print key ... return self.dict[key] </code></pre> <p>當:
我知道我可能誤解了機制,但有沒有一種方法來模擬字典並遵循所請求的數據字符串? 主要是讓我可以動態地記錄缺少的變量在字典中的流...
這顯然作品(但它不是我喜歡的原生語法):
data["key:subkey"]
def __getitem__(self, key, **args):
for slice in key.split(':'):
print key
...
的目標是效仿以下,
作品:
data = {'key' : {'subkey' : 1}}
print data["key"]["subkey"]
不會工作,但我要趕內__getitem__
異常,然後創建MI ssing鍵自動或只要登錄丟失的子項:
data = {'key' : {}}
print data["key"]["subkey"]
解決方法:
class Var():
def __init__(self):
self.dict = {'test' : {}}
def __getitem__(self, var, **args):
print ':',var
if var in self.dict:
v = Var(self.dict[var])
return v
print vHandle['test']['down']
輸出:
:測試
:下來
無
我在這裏錯過了什麼,或者這樣做不值得讚賞嗎? downvoter可以解釋自己嗎? – Polynomial 2012-02-21 13:25:05
'data'的類型是什麼? 'data [「key」]'是什麼類型的?您可能需要展示更多代碼 - 否則我們所能做的只是猜測。 (不是我的downvote) – 2012-02-21 13:27:31
不,你不能直接做(你可以通過返回一個包裹對象做同樣的行爲)。可以這樣想:'_ = data ['key']'後面跟着'_''子鍵']'。如果這是訪問數據的有效方式,您可以選擇'data''key','subkey']'(元組鍵)。 – 2012-02-21 13:28:33