这个递归Python代码是如何工作的



我遇到了一个递归函数,它应该使字典变平:

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()函数构建树下的路径,其中路径中的名称由分隔符分隔。前缀将添加到该路径的开头。

CCD_ 2仅为"0";"空";如果将其设置为None。这将具有抑制前缀的效果。

例如,比较以下内容的输出:

[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()]

最新更新