如何通过引用另一个变量删除dict中的对象

时间:2013-12-14 22:49:09

标签: python

所以我有嵌套的字典对象

a = {'a':{'b':[1,2,3]}}

我引用了嵌套的'b':

c=a['a']['b']

现在我打电话

del c
print a

结果

{'a':{'b':[1,2,3]}}

删除变量c但它引用的对象仍然存在。我想完全删除嵌套的'b'对象。

很容易做到这一点
del a['a']['b']

但是在实际应用中,嵌套太深,而且经常使用它是为了可行。

问题:如何删除仅在另一个变量中引用它的字典标记?

1 个答案:

答案 0 :(得分:4)

del仅处理提供的参考 ;它不能删除其他地方对相同值的引用。这不是Python的工作原理。

路径存储在嵌套结构中:

path = ('a', 'b')

您可以解决此类路径:

def resolve_path(dictionary, path):
    return reduce(dict.get, path, dictionary)

或者您可以获取,之后您可以删除最后一个元素:

def del_endpoint(dictionary, path):
    parent_path, last = path[:-1], path[-1]
    parent = resolve_path(dictionary, parent_path)
    del parent[last]

这当然非常特定于嵌套词典;对于属性或列表项,您需要额外的代码。