簡體   English   中英

基於停止遞歸級別修剪python字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM