Python 为每次迭代删除dict中的叶节点
我有一个JSON示例,如:Python 为每次迭代删除dict中的叶节点,python,Python,我有一个JSON示例,如: {'key1': {'key2': 2, 'key3': 1, 'key4' : 1}} 我想删除每个叶节点一次,然后使用python打印JSON 为此,我有用于打印所有叶节点的代码。但是,有人能帮我写代码动态删除一个叶节点-一次一个吗 def print_all_leaf_nodes(data): if isinstance(data, dict): for item in data.values(): print_
{'key1': {'key2': 2, 'key3': 1, 'key4' : 1}}
我想删除每个叶节点一次,然后使用python打印JSON
为此,我有用于打印所有叶节点的代码。但是,有人能帮我写代码动态删除一个叶节点-一次一个吗
def print_all_leaf_nodes(data):
if isinstance(data, dict):
for item in data.values():
print_all_leaf_nodes(item)
elif isinstance(data, list) or isinstance(data, tuple):
for item in data:
print_all_leaf_nodes(item)
else:
print data
输入:
{'key1': {'key2': 2, 'key3': 1, 'key4' : 1}}
输出:
{'key1': {'key3': 1, 'key4' : 1}}
{'key1': {'key2': 2, 'key4' : 1}}
{'key1': {'key2': 2, 'key3': 1}}
i、 e对于每个迭代,删除一个键值对,如果它是叶节点
注意:即使我能够从父级获取密钥路径,但不确定如何删除确切的元素
例如,如果json是
{ "key1" : { "key2" : { "key3": "value1", "key4" : "value2" }}}
我有一个递归函数,它返回一个字符串
key_to_be_removed = "key1.key2.key4"
但我不确定如何使用此字符串删除键4
请帮助。听起来您有三个明显的问题:
if
:
def foo(d):
返回{
关键词:价值
对于键,d.items()中的值
如果某个条件(键、值)
}
其中某些条件是
递归
这是。在递归地将方法应用于词典及其值的情况下,您只需在词典理解中包含递归引用:
def foo(d):
返回{
关键字:foo(值)
对于键,d.items()中的值
}
如果我了解到您的口述如下:
g = {
2: 3,
4:
{
3: 4,
34: {
36: 5,
8: 5,
7: 9,
9: 7
},
8: 9,
9: {
3: 4
}
},
89: 3
}
myTree = {
tree: [3, 4, 5, 5, 9, 4],
nodes: [2,4,[3,34,[36,8],8,9,[9,[3,4]]]]
}
本文描述了一个通用的树结构,其中每个节点都可以指向一个项目或子树
如果需要对树进行迭代,并在每次迭代中返回不带叶的树,则可以使用生成器。您可以利用python不深度复制dict这一事实,因此,如果将dict传递给函数,然后在函数内部弹出一个元素,那么也会在函数外部弹出一个元素:
此代码未经测试,请测试它
另一种方法是创建一个更好地重新呈现树的对象,例如,您可以开始注意,您可以使用如下内容重新呈现g
:
g = {
2: 3,
4:
{
3: 4,
34: {
36: 5,
8: 5,
7: 9,
9: 7
},
8: 9,
9: {
3: 4
}
},
89: 3
}
myTree = {
tree: [3, 4, 5, 5, 9, 4],
nodes: [2,4,[3,34,[36,8],8,9,[9,[3,4]]]]
}
你可能想要阅读和阅读。