字典中的递归列表? -蟒蛇

时间:2020-08-29 11:37:29

标签: python

我不久前就开始学习Python,并且我正在尝试为列表做递归函数。这是功能:

def get_employee(j, field, value):
    res = j
    for x in res:
            if x['Name'] == field and x['Value'] == value:
                return res
            elif "Properties" not in x:
                if x is not None:
                    continue
            elif "Properties" in x:
                return get_employee(x['Properties'], field, value)

这是我的JSON:

[{
        "Value": "Sales",
        "Name": "Department",
        "Properties": [{
            "Value": "US",
            "Name": "Country",
            "Properties": [{
                    "Value": "Employee",
                    "Name": "EmployeeType",
                    "Properties": [{
                            "Value": "Manya Bishter",
                            "Name": "EmployeeFullName",
                            "Properties": [{
                                    "Value": 1111,
                                    "Name": "EmployeeID"
                                },
                                {
                                    "Value": "Manya",
                                    "Name": "EmployeeFirstName"
                                },
                                {
                                    "Value": "Bishter",
                                    "Name": "EmployeeLastName"
                                }

                            ]
                        },
                        {
                            "Value": "Michael Ort",
                            "Name": "EmployeeFullName",
                            "Properties": [{
                                    "Value": 1112,
                                    "Name": "EmployeeID"
                                },
                                {
                                    "Value": "Michael",
                                    "Name": "EmployeeFirstName"
                                },
                                {
                                    "Value": "Ort",
                                    "Name": "EmployeeLastName"
                                }
                            ]
                        }
                    ]
                },
                {
                    "Value": "Manager",
                    "Name": "EmployeeType",
                    "Properties": [{
                        "Value": "Nick Fair",
                        "Name": "EmployeeFullName",
                        "Properties": [{
                                "Value": 1113,
                                "Name": "EmployeeID"
                            },
                            {
                                "Value": "Nick",
                                "Name": "EmployeeFirstName"
                            },
                            {
                                "Value": "Fair",
                                "Name": "EmployeeLastName"
                            }
                        ]
                    }]
                }
            ]
        }]
    },
    {
        "Value": "Marketing",
        "Name": "Department",
        "Properties": [{
            "Value": "US",
            "Name": "Country",
            "Properties": [{
                "Value": "Employee",
                "Name": "EmployeeType",
                "Properties": [{
                    "Value": "Tamta Hiresh",
                    "Name": "EmployeeFullName",
                    "Properties": [{
                            "Value": 1121,
                            "Name": "EmployeeID"
                        },
                        {
                            "Value": "Tamta",
                            "Name": "EmployeeFirstName"
                        },
                        {
                            "Value": "Hiresh",
                            "Name": "EmployeeLastName"
                        }
                    ]
                }]
            }]

        }]
    }

]

该功能仅在Manya上有效,而在其他地方则无效。

例如,如果我这样做:

print(get_employee(myjson, "EmployeeFirstName", "Nick"))

它将打印:

[{'Value': 1111, 'Name': 'EmployeeID'}, {'Value': 'Manya', 'Name': 'EmployeeFirstName'}, {'Value': 'Bishter', 'Name': 'EmployeeLastName'}]

但是对于其他人(例如Nick),它将返回None

可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

代码如下:

Deconstruct

您的递归函数的问题是,一旦到达def get_employee(data, field, value): result = [] def recursor(j, field, value): res = j for x in res: if x['Name'] == field and x['Value'] == value: result.append(res) elif "Properties" not in x: if x is not None: continue elif "Properties" in x: recursor(x['Properties'], field, value) recursor(data,field,value) return result ;它将停止外部for循环return get_employee(x['Properties'], field, value)。因此,它将永远不会在列表中的下一项上运行。