S
S
Sergey Zolotarev2020-07-29 15:39:00
Python
Sergey Zolotarev, 2020-07-29 15:39:00

Why can't you create associative keys like in Javascript and PHP?

Good afternoon!

Some Python functionality can be similar to PHP and JavaScript functionality, for example - creating associative keys?

The example code itself:

#Работа с данными для их анализа
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 = "Жен"

    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 mls_scc.itterows():

            if rowm['gender'] == "M": 
                input_ssc_level = rd[rowm[1][0][index]].value
            if rowm['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 mls_hsc.itterows():

            if rowm['gender'] == "M": 
                input_ssc_level = rd[rowm[1][0][index]].value
            if rowm['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 mls_mba.itterows():

            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 mls_estet.itterows():

            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 mls_degree.itterows():

            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)


If you see sgl - this is a variable responsible for the implementation of associative keys. In terms of arrays, Python has some similarities with arrays in PHP and JS. But I'm new to Python and ran into this issue from the compiler:
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
 in 
     20         gender = "Жен"
     21 
---> 22     sgl['profile']['gender'] = gender
     23     sgl['profile']['education_work'] = {
     24         'degree': row['degree_t'],

KeyError: 'profile'

It requires that the array key be properly implemented. Following this material , I thought that it would work well and everything became different.
Can you tell me how to correctly implement associative arrays in Python so that the program can make good money?
Thank you in advance!

Answer the question

In order to leave comments, you need to log in

2 answer(s)
M
Maxim, 2020-07-29
@seregazolotaryow64

Python "on the fly" is not able to create keys of dictionaries (ass. arrays).
This will not work if the sql dictionary does not have all nested keys. For everything to work, make sure that the keys are present in the dictionary. If they are not, then initiate them.
sgl['profile']['info']['degree'] = row['degree_p']

if 'profile' not in sql:
    sql.update({'profile': {}})
if 'info' not in sql['profile']:
    sql['profile'].update({'info': {}})
if 'degree' not in sql['profile']['info']:
    sql['profile']['info'].update({'degree': {}})

And then this will work:
sgl['profile']['info']['degree'] = row['degree_p']

D
Dr. Bacon, 2020-07-29
@bacon

>>> sgl = {}
>>> sgl['profile']['gender'] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'profile'
>>> sgl
{}
>>> sgl['profile'] = {}
>>> sgl['profile']['gender'] = 1
that's clearer?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question