如何优雅地深入堆叠dict

时间:2016-07-30 18:20:51

标签: python

我们说我有一个像

这样的词典
{
    "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')

我怎样才能优雅地做到这一点?

1 个答案:

答案 0 :(得分: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'}}