列表理解的递归函数

Recursive Function to List Comprehension

所以我有以下简单的函数,可以将字典转换为 listtuple。我很好奇是否有一种方法可以通过列表理解来做到这一点。 我知道这在代码方面不是很好,但我想知道如果我们不知道深度是否可行。

import typing as t

def _dict_to_map(dict_: t.Dict[t.Any, t.Union[t.Dict, t.Any]]):
    map_ = []
    for k, v in dict_.items():
        if isinstance(v, dict):
            map_.append((k, _dict_to_map(v)))
        else:
            map_.append((k, v))
    return map_

是的,你可以

def _dict_to_map(dict_: t.Dict[t.Any, t.Union[t.Dict, t.Any]]):
    return [(k, _dict_to_map(v)) if isinstance(v, dict) else (k, v)
            for k, v in dict_.items()]

当然可以。当您在 for 循环中使用 append 填充列表时,只需移动部分即可将其转换为列表理解:

    return [(k, _dict_to_map(v) if isinstance(v, dict) else v)
            for k, v in dict_.items()]

您可以通过将基本案例移出循环来简化循环,这反过来又可以更容易地了解如何将其转化为推导式:

def _dict_to_map(d):
    if not isinstance(d, dict):
        return d
    return [(k, _dict_to_map(v)) for k, v in d.items()]