S
S
Sergey Zolotarev2020-07-31 13:47:14
Python
Sergey Zolotarev, 2020-07-31 13:47:14

What is the correct way to nest one loop inside the used one?

Good afternoon!
I am facing one problem from python compiler on object unpacking:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 
     40         mls_scc = LearnMaxLevelDataArray("school")
     41 
---> 42         for rowm, index in range(len(mls_scc)):
     43 
     44             if row['gender'] == "M":

TypeError: cannot unpack non-iterable int object


The problem itself is that one cycle is nested inside the used cycle (it concerns the rest of the same cycles) and the compiler cannot match one type of object with another.

Example code (where this problem occurs):
i#Работа с данными для их анализа
ds = DatasetRead()
rdata = ReportDataRead()
rwb = ReportDataWorkBook()
rd = rwb.get_sheet_by_name('Report')

#Массивы для проверки соответствии при анализе
mlsb = LearnLevelBalanceArray()
msd = maxSalaryDataArray()
sgl = {}


for index, row in ds.iterrows():
    #Производит выборку данных из датасета. Это - первый этап анализа данных по студентам с опытом работы.

    #Если решение на русском языке, то расшифровка пола выпускника переводится на английский язык.
    if row['gender'] == "M": 
        gender = "Муж"
    if row['gender'] == "F": 
        gender = "Жен"
    if 'profile' not in sgl:
        sgl.update({'profile': {}})
    if 'info' not in sgl['profile']:
        sgl['profile'].update({'info': {}})
    if 'degree' not in sgl['profile']['info']:
        sgl['profile']['info'].update({'degree': {}})

    sgl['profile']['gender'] = gender
    sgl['profile']['education_work'] = {
        'degree': row['degree_t'],
        'specialisation': row['specialisation'],
        'salary': row['salary']
    }
    

    

    if row['workex'] == "Yes":

        mls_scc = LearnMaxLevelDataArray("school")

        for rowm, index in range(len(mls_scc)):

            if row['gender'] == "M": 
                input_ssc_level = rd[rowm[1][0][index]].value
            if row['gender'] == "F": 
                input_ssc_level = rd[rowm[0][0][index]].value

            maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
            userlevelbalance = 100 - row['ssc_p']

            if maxlevelbalance > userlevelbalance:
                    levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня

            if maxlevelbalance < userlevelbalance:
                levelbalance = userlevelbalance - maxlevelbalance

            for rowms, index in mlsb.iterrows():
                if levelbalance == rowms[index] or levelbalance > rowms[index]:

                    #Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень школьных знании, которого добился выпускник
                    sgl['profile']['info']['school'] = row['ssc_p']

        mls_hsc = LearnMaxLevelDataArray("high")

        for rowm, index in range(len(mls_hsc)):

            if row['gender'] == "M": 
                input_ssc_level = rd[rowm[1][0][index]].value
            if row['gender'] == "F": 
                input_ssc_level = rd[rowm[0][0][index]].value

            maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
            userlevelbalance = 100 - row['hsc_p']

            if maxlevelbalance > userlevelbalance:
                    levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня

            if maxlevelbalance < userlevelbalance:
                levelbalance = userlevelbalance - maxlevelbalance

            for rowms, index in mlsb.iterrows():
                if levelbalance == rowms[index] or levelbalance > rowms[index]:

                    #Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень знании в ВУЗах, которого добился выпускник
                    sgl['profile']['info']['highschool'] = row['hsc_p']

        mls_mba = LearnMaxLevelDataArray("mba")

        for rowm, index in range(len(mls_mba)):

            if row['gender'] == "M": 
                input_ssc_level = rd[rowm[1][0][index]].value
            if row['gender'] == "F": 
                input_ssc_level = rd[rowm[0][0][index]].value

            maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
            userlevelbalance = 100 - row['mba_p']

            if maxlevelbalance > userlevelbalance:
                    levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня

            if maxlevelbalance < userlevelbalance:
                levelbalance = userlevelbalance - maxlevelbalance

            for rowms, index in mlsb.iterrows():
                if levelbalance == rowms[index] or levelbalance > rowms[index]:

                    #Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень знании в ВУЗах, которого добился выпускник
                    sgl['profile']['info']['highschool'] = row['mba_p']


        mls_estet = LearnMaxLevelDataArray("estet")

        for rowm, index in range(len(mls_estet)):

            if row['gender'] == "M": 
                input_ssc_level = rd[rowm[1][0][index]].value
            if row['gender'] == "F": 
                input_ssc_level = rd[rowm[0][0][index]].value

            maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
            userlevelbalance = 100 - row['estet_p']

            if maxlevelbalance > userlevelbalance:
                    levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня

            if maxlevelbalance < userlevelbalance:
                levelbalance = userlevelbalance - maxlevelbalance

            for rowms, index in mlsb.iterrows():
                if levelbalance == rowms[index] or levelbalance > rowms[index]:

                    #Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень знании в ВУЗах, которого добился выпускник
                    sgl['profile']['info']['estet'] = row['estet_p']

        mls_degree = LearnMaxLevelDataArray("degree")

        for rowm, index in range(len(mls_degree)):

            if row['gender'] == "M": 
                input_ssc_level = rd[rowm[1][0][index]].value
            if row['gender'] == "F": 
                input_ssc_level = rd[rowm[0][0][index]].value

            maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
            userlevelbalance = 100 - row['degree_p']

            if maxlevelbalance > userlevelbalance:
                    levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня

            if maxlevelbalance < userlevelbalance:
                levelbalance = userlevelbalance - maxlevelbalance

            for rowms, index in mlsb.iterrows():
                if levelbalance == rowms[index] or levelbalance > rowms[index]:

                    #Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень знании в ВУЗах, которого добился выпускник
                    sgl['profile']['info']['degree'] = row['degree_p']



print(sgl)

What is the correct way to nest loops and objects so that the compiler matches one object type well with another object type, judging by the description of the error? What options does Python offer?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
I
iddqda, 2020-07-31
@iddqda

The in range construct produces one value per cycle,
and you are trying to put this one value into two variables.
For such cases, you came up with enumerate(),
though this will not help you.

for rowm, index in range(len(mls_scc)):
    if row['gender'] == "M": 
        input_ssc_level = rd[rowm[1][0][index]].value

Pass the first row, break on the 3rd:
> rowm[1][0][index]

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question