在Python中递归且与字符串列表并行调用相同的函数

问题描述 投票:0回答:1

我有一个用户列表,即 user_list=["用户1","用户2","用户3"] 我有一个名为搜索的功能,它可以搜索用户及其经理,然后搜索经理的经理,依此类推,直到到达没有任何经理的首席执行官级别。 最后我必须返回每个用户的经理和他们的经理。

user_list =["user1","user2","user3","user4","user5"]

def search(user):
    user_details = ldap.search(user)
    user_manager = user_details["manager"]
    new_user = user_manager
    list_of_user_managers.append(new_user)
    if new_user["manager"] == "None":
       return list_of_user_managers
    else:
       return search(new_user)

其中 user_details 具有以下数据。 user_details = {'ntid': 'tom', 'ldap_owner': 'roy', 'ldap_manager': 'noman', 'ldap_email': '[电子邮件受保护]'}

搜索后我期待这样的结果: 用户1层次结构:经理1,经理2,经理3,经理4 将 manager1 视为 user1 的 1 级经理,将 manager2 视为 manager1 的经理。 用户2层次结构:经理11,经理22,经理33,经理44 将 manager11 视为 user2 的一级经理,将 manager22 视为 manager11 的经理。

我需要重写上面的函数,以便它从用户列表中接受用户并且并行。

python list multithreading recursion python-asyncio
1个回答
0
投票
def ldap_search(user):
    ldap_data = {
        "user1": {'ntid': 'user1', 'ldap_owner': 'roy', 'ldap_manager': 'manager1', 'ldap_email': '[email protected]'},
        "user2": {'ntid': 'user2', 'ldap_owner': 'roy', 'ldap_manager': 'manager11', 'ldap_email': '[email protected]'},
        "user3": {'ntid': 'user3', 'ldap_owner': 'roy', 'ldap_manager': 'manager21', 'ldap_email': '[email protected]'},
        "user4": {'ntid': 'user4', 'ldap_owner': 'roy', 'ldap_manager': 'manager31', 'ldap_email': '[email protected]'},
        "user5": {'ntid': 'user5', 'ldap_owner': 'roy', 'ldap_manager': 'manager41', 'ldap_email': '[email protected]'},
        "manager1": {'ntid': 'manager1', 'ldap_owner': 'roy', 'ldap_manager': 'manager2', 'ldap_email': '[email protected]'},
        "manager2": {'ntid': 'manager2', 'ldap_owner': 'roy', 'ldap_manager': 'manager3', 'ldap_email': '[email protected]'},
        "manager3": {'ntid': 'manager3', 'ldap_owner': 'roy', 'ldap_manager': 'manager4', 'ldap_email': '[email protected]'},
        "manager4": {'ntid': 'manager4', 'ldap_owner': 'roy', 'ldap_manager': 'CEO', 'ldap_email': '[email protected]'},
        "manager11": {'ntid': 'manager11', 'ldap_owner': 'roy', 'ldap_manager': 'manager22', 'ldap_email': '[email protected]'},
        "manager22": {'ntid': 'manager22', 'ldap_owner': 'roy', 'ldap_manager': 'manager33', 'ldap_email': '[email protected]'},
        "manager33": {'ntid': 'manager33', 'ldap_owner': 'roy', 'ldap_manager': 'manager44', 'ldap_email': '[email protected]'},
        "manager44": {'ntid': 'manager44', 'ldap_owner': 'roy', 'ldap_manager': 'CEO', 'ldap_email': '[email protected]'},
        "manager21": {'ntid': 'manager21', 'ldap_owner': 'roy', 'ldap_manager': 'manager31', 'ldap_email': '[email protected]'},
        "manager31": {'ntid': 'manager31', 'ldap_owner': 'roy', 'ldap_manager': 'manager41', 'ldap_email': '[email protected]'},
        "manager41": {'ntid': 'manager41', 'ldap_owner': 'roy', 'ldap_manager': 'CEO', 'ldap_email': '[email protected]'},
        "CEO": {'ntid': 'CEO', 'ldap_owner': 'roy', 'ldap_manager': 'None', 'ldap_email': '[email protected]'}
    }
    return ldap_data.get(user, {})

def search(user):
    user_details = ldap_search(user)
    manager = user_details.get("ldap_manager")
    if manager == None or manager == "CEO":
        return [user]
    else:
        return [user] + search(manager)

def search_user_list(user_list):
    result = []
    for user in user_list:
        managers = search(user)
        result.append(managers)
    return result

user_list = ["user1", "user2", "user3", "user4", "user5"]
ret = search_user_list(user_list)
print('\n'.join([str(i) for i in ret]))
© www.soinside.com 2019 - 2024. All rights reserved.