Python: неограниченное количество циклов в циклах - PullRequest
0 голосов
/ 03 февраля 2020

Есть ли умный способ получить наш неограниченный уровень вложенности l oop?

На каждом l oop он должен проверить, нет ли item в списке done_items или group еще нет в списке done_groups. Если нет, то запускается еще один l oop. И так далее, и так далее ... В большинстве случаев достаточно двух уровней, но иногда требуется до 100.

def get_cluster(dict_1, dict_2):

    done_groups, done_items = [], []
    item_cluster = {}
    cluster = 1

    for item_main in dict_1.keys():
        if item_main not in done_items:  # check if item hasn't been already done
            for group_1 in dict_1[item_main]:  # Loop 1 through groups
                if group_1 not in done_groups:  # check if group hasn't been already done
                    done_groups.append(group_1)
                    for item_1 in dict_2[group_1]:  # Loop 1 through items
                        if item_1 not in done_items:  # check if item hasn't been already done
                            done_items.append(item_1)
                            item_cluster[item_1] = cluster
                            for group_2 in dict_1[item_1]:  # Loop 2 through groups
                                if group_2 not in done_groups:  # check if group hasn't been already done
                                    done_groups.append(group_2)
                                    for item_2 in dict_2[group_2]:  # Loop 2 through items
                                        if item_2 not in done_items:  # check if item hasn't been already done
                                            done_items.append(item_2)
                                            item_cluster[item_2] = cluster
                                            for group_3 in dict_1[item_2]:  # Loop 3 through groups
                                                if group_3 not in done_groups:  # check if group hasn't been already done
                                                    done_groups.append(group_3)
                                                    for item_3 in dict_2[group_3]:  # Loop 3 through items
                                                        if item_3 not in done_items:  # check if item hasn't been already done
                                                            done_items.append(item_3)
                                                            item_cluster[item_3] = cluster
            cluster += 1

    return item_cluster

Есть ли способ применить while l oop здесь?

...