列表理解的递归函数
Recursive Function to List Comprehension
所以我有以下简单的函数,可以将字典转换为 list
的 tuple
。我很好奇是否有一种方法可以通过列表理解来做到这一点。 我知道这在代码方面不是很好,但我想知道如果我们不知道深度是否可行。
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()]
所以我有以下简单的函数,可以将字典转换为 list
的 tuple
。我很好奇是否有一种方法可以通过列表理解来做到这一点。 我知道这在代码方面不是很好,但我想知道如果我们不知道深度是否可行。
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()]