为什么这段代码没有遍历所有 dict 的元素?

我有一个有很多值的字典,其中一些是子字典,也有子字典等等。


对于每个值,我需要构建一个字符串,将顶级键与一个点连接起来。例如,如果我的 dict 是{'a': 1, 'b': {'c': 2, 'd': 3, 'e': {'f': 4}}},我需要构建以下字符串:


a

b.c

b.d

b.e.f

为此,我编写了以下代码


from types import GeneratorType



def get_parameter(d, top_level_param):

    for k, v in d.items():

        parameter = top_level_param + '.' + k

        if isinstance(v, dict):

            get_parameter(v, parameter)

        else:

            yield parameter



d = {'a': 1, 'b': {'c': 2, 'd': 3, 'e': {'f': 4}}}


for k, v in d.items():

    if isinstance(v, dict):

        parameter = get_parameter(v, k)

    else:

        parameter = k


    if isinstance(parameter, GeneratorType):

        for p in parameter:

            print(p)

    else:

        print(parameter)

但是,输出丢失b.e.f,我不知道为什么。在纸面上,它看起来应该由 返回get_parameter()。


Smart猫小萌
浏览 174回答 1
1回答

12345678_0001

get_parameter递归调用自身,但不对结果做任何事情。相反,您也想产生这些结果,您可以使用以下yield from语句:def get_parameter(d, top_level_param):    for k, v in d.items():        parameter = top_level_param + '.' + k        if isinstance(v, dict):            yield from get_parameter(v, parameter)        else:            yield parameter
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python