dict中的递归列表?python

2024-10-01 09:35:55 发布

您现在位置: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

你能帮忙吗

谢谢


Tags: nameinfieldgetvalueemployeeresproperties
1条回答
网友
1楼 · 发布于 2024-10-01 09:35:55

代码如下:

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            

递归函数的问题是,一旦它命中return get_employee(x['Properties'], field, value);它将停止外部for循环for x in res:。因此,它永远不会在列表中的下一项上运行

相关问题 更多 >