首页 > 解决方案 > Python递归函数从dict中获取数据

问题描述

我创建了一个递归函数来从字典中获取数据。字典由键组成,每个键都有一个键列表,并且继续下去。因此,当我输入键时,我需要获取键的展平列表。

我的字典:

data = {"p": ["s1", "s2", "s3", "s4"],
        "s1": ["s1s1", "s1s2"],
        "s2": [],
        "s3": [],
        "s4": [],
        "s1s1": [],
        "s1s2": ["s1s2s1"],
        "s1s2s1": []
        }

我的功能:

def get_data(key):
    items = data[key]
    if items:
        for key in items:
            items += get_data(key)
    return items

当我打电话时get_data("p")它返回

['s1', 's2', 's3', 's4', 's1s1', 's1s2', 's1s2s1', 's1s2s1']

但预期的输出是:

['s1', 's2', 's3', 's4', 's1s1', 's1s2', 's1s2s1']

在此先感谢您的帮助...

标签: pythonrecursion

解决方案


问题在于这些方面 -

for key in items:
    items += get_data(key)

在这里,您在迭代项目时正在修改项目。因此,在最后一次迭代中,您items最终会多次使用相同的密钥;您可以添加一个日志语句来查看正在使用哪个键来调用get_data.

您想单独获取所有新项目,然后在迭代完成后更新项目 -

new_items = []
for key in items:
    new_items += get_data(key)
items += new_items

推荐阅读