[英]Trim python dictionary based on stop recursion level
假设我有以下 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_stop_obj
,下面是它应该返回的一些示例:
resurse_stop(d, 1)
# d = {1: {}, 10: {}}
resurse_stop(d, 2)
# d = {1: {2: {}, 6: {}, 8: {}, 9: {}}, 10: {11: {}}}
将您的print
表达式包装成字典理解:
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: {}}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.