簡體   English   中英

這個遞歸 Python 代碼是如何工作的?

[英]How does this recursive Python code work?

我遇到了這個遞歸的 function ,它應該使字典變平:

def flatten(data, prefix='', separator='.'):
    """Flattens a nested dict structure. """
    if not isinstance(data, dict):
        return {prefix: data} if prefix else data

        result = {}
        for (key, value) in data.items():
            result.update(flatten(value,_get_new_prefix(prefix, key, separator),
            separator=separator))
        return result

def _get_new_prefix(prefix, key, separator):
    return (separator.join((prefix, str(key))) if prefix else str(key))

它也應該被輸入這些數據:

nested = {
 'fullname': 'Alessandra',
 'age': 41,
 'phone-numbers': ['+447421234567', '+447423456789'],
 'residence': {'address': {'first-line': 'Alexandra Rd','second-line': '',},
 'zip': 'N8 0PP',
 'city': 'London',
 'country': 'UK',
 },
}

我試圖弄清楚它是如何工作的,特別是“前綴”參數是如何工作的,在什么情況下它不會為空。

flatten() function 沿着樹構建路徑,其中路徑中的名稱由分隔符分隔。 前綴被添加到該路徑的開頭。

如果您將其設置為None ,則prefix僅是“空的”。 這將具有抑制前綴的效果。

例如,比較這個的 output:

[print(k, ' = ', v) for k,v in flatten(nested, prefix='xxx', separator='/').items()]

...有了這個:

[print(k, ' = ', v) for k,v in flatten(nested, prefix=None).items()]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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