2016-07-30 18 views
2

比方說,我有一個像如何潛入堆疊字典優雅

{ 
    "key_a": "value", 
    "key_b": { 
     "key_b_a": "value", 
     "key_b_b": { 
      "key_b_b_a": "value" 
     } 
    } 
} 

的字典我想是創建到刪除給定鍵或更改其值的方法。

def del_key(key): 
    my_dict = <dictionary described above> 
    keys = key.split(':') 
    if len(keys) == 1: 
     del my_dict[keys[0]] 
    elif len(keys) == 2: 
     del my_dict[keys[0]][keys[1]] 
    elif len(keys) == 3: 
     del my_dict[keys[0]][keys[1]][keys[2]] 
    . . . 

del_key('key_b:key_b_b:key_b_b_a') 
del_key('key_b:key_b_b') 
del_key('key_a') 

我該如何優雅地做到這一點?

+0

目前的'del'命令有什麼問題?似乎它已經完成了你的方法,只是語法略有不同。 – James

+0

字典結構可能有所不同,它可能有任何數字堆疊字典。 if-else是一個相當醜陋的解決方案,用於刪除一個密鑰,例如,第10個子級 –

回答

4

它假設您的輸入是有效的密鑰,否則您必須檢查。

data = { 
    "key_a": "value", 
    "key_b": { 
     "key_b_a": "value", 
     "key_b_b": { 
      "key_b_b_a": "value" 
     } 
    } 
} 

def del_key(key): 
    key = key.split(':') 
    temp = data 
    for i in key[:-1]: 
     temp = temp[i] 
    del temp[key[-1]] 
    return data 

print del_key('key_b:key_b_b:key_b_b_a') 
print del_key('key_b:key_b_b') 
print del_key('key_a') 

output: 
{'key_a': 'value', 'key_b': {'key_b_a': 'value', 'key_b_b': {}}} 
{'key_a': 'value', 'key_b': {'key_b_a': 'value'}} 
{'key_b': {'key_b_a': 'value'}} 
+0

太棒了!非常感謝! –

+0

@AlexanderZhak :)不是問題 – galaxyan

+0

用'data'作爲函數參數並檢查鍵的存在,這將是一個美妙的答案:)(目前還不錯,但總有一些東西需要調整:P) –