Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于停止递归级别的python字典修剪_Python_Recursion - Fatal编程技术网

基于停止递归级别的python字典修剪

基于停止递归级别的python字典修剪,python,recursion,Python,Recursion,假设我有以下Python字典: d = {1: {2: {3: {}}, 6: {7: {}}, 8: {}, 9: {}}, 10: {11: {}}} 我可以使用以下函数递归遍历对象中的某个级别: def resurse_stop(d, stop=None, curr=0): if stop and curr == stop: return for k, v in d.items(): print(f"{k} (level={curr})")

假设我有以下Python字典:

d = {1: {2: {3: {}}, 6: {7: {}}, 8: {}, 9: {}}, 10: {11: {}}}
我可以使用以下函数递归遍历对象中的某个级别:

def resurse_stop(d, stop=None, curr=0):
    if stop and curr == stop:
        return
    for k, v in d.items():
        print(f"{k} (level={curr})")
        if v:
            resurse_stop(v, stop, curr + 1)

resurse_stop(d, 1)
# 1 (level=0)
# 10 (level=0)

resurse_stop(d, 2)
# 1 (level=0)
# 2 (level=1)
# 6 (level=1)
# 8 (level=1)
# 9 (level=1)
# 10 (level=0)
# 11 (level=1)
如何基于停止级别创建新对象,这类似于上面的
resurse_stop
功能,但它不是打印数据,而是构建一个对象。让我们调用函数
resurse\u stop\u obj
,下面是一些它应该返回的示例:

resurse_stop(d, 1)
# d = {1: {}, 10: {}}

resurse_stop(d, 2)
# d = {1: {2: {}, 6: {}, 8: {}, 9: {}}, 10: {11: {}}}

将您的
print
表达式包装成dict:

d = {1: {2: {3: {}}, 6: {7: {}}, 8: {}, 9: {}}, 10: {11: {}}}

def resurse_stop(d, stop=None, curr=0):
    if stop and curr == stop:
        return {}

    return {k: {} if not v else resurse_stop(v, stop, curr + 1)
               for k, v in d.items() }

print(resurse_stop(d, 2))
输出:

{1: {2: {}, 6: {}, 8: {}, 9: {}}, 10: {11: {}}}

基本上你自己给出了答案:不要打印东西,而是向一个对象添加一些东西。到底是什么问题?你不需要停下来休息。停下来就够了。绕过stop-1,检查它是否为零。你用这个干什么?看起来很不自然。@AMC我在UI中使用它来根据用户提供的级别构建树