gpt4 book ai didi

python - 每次迭代删除字典中的叶节点

转载 作者:行者123 更新时间:2023-11-28 19:10:54 25 4
gpt4 key购买 nike

我有一个示例 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_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}}

即对于每次迭代,如果其叶节点,则删除键值对。

注意:即使我能够从父级获取关键路径,但不确定如何删除确切的元素。

例如如果json是

{ "key1" : { "key2" : { "key3": "value1", "key4" : "value2" }}}

我有一个递归函数,它返回一个字符串

key_to_be_removed = "key1.key2.key4"

但我不确定如何使用此字符串删除 key4。

请帮忙。

最佳答案

听起来你有三个不同的问题:

  1. 检测树中的叶节点。
  2. 根据某些条件从字典中删除键值对。
  3. 沿着树递归地执行此操作。

您的叶节点检测工作正常。对于后两者,我建议您阅读 dictionary comprehensions .

删除某些值

要复制删除某些值的字典,您可以在字典理解中使用 if:

def foo(d):

return {
key: value
for key, value in d.items()
if some_condition(key, value)
}

some_condition

递归

这是 a broad topic .在将方法递归应用于字典及其值的情况下,您可以简单地在字典理解中包含一个递归引用:

def foo(d):

return {
key: foo(value)
for key, value in d.items()
}

关于python - 每次迭代删除字典中的叶节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40344938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com