Цикл по словарю или списку в Python - PullRequest
0 голосов
/ 13 апреля 2020

У меня определен этот объект словаря. Я соединил al oop вместе до go и распечатал пары KEY / VALUE.

Когда код перебирает секцию «file1_info», я могу получить доступ к элементам. Но когда он попадает в раздел «индексы», я не могу никуда попасть.

Интересно, что если в разделе «индексы» есть только 1 элемент, код будет работать. Но больше, чем один, я получаю сообщение об ошибке.

Любые предложения о том, как выполнить sh это ??

    DATA_INFO = {'file1_info': {
               'filename'   : 'Datafile1_' + str(yyyy),
               'file_ext'   : 'xls',
               'active'     : 'Y',
               'calc_idx'   : '1,4',
               'inc_columns': '1,2,11',
               'indexes':
                 [{'name': 'ZAXDR',   'active': 'N', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'},
                 {'name': 'ZAXLP',   'active': 'Y', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'},
                 {'name': 'ZAXERNL', 'active': 'Y', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'},
                 {'name': 'ZAXERNS', 'active': 'Y', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'}]
              },
             'file2_info': {
               'filename'   : 'Datafile2_' + str(yyyy),
               'file_ext'   : 'xls',
               'active'     : 'Y',
               'calc_idx'   : '1,4',
               'inc_columns': '1,2,11',
               'indexes':
                 {'name': 'ZAX', 'active': 'Y', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'}
              }
            }



  for v_key, v_label in DATA_INFO.items():
    v_filename    = NYSE_INFO[v_key]['filename']
    v_file_ext    = NYSE_INFO[v_key]['file_ext']
    v_active      = NYSE_INFO[v_key]['active']
    v_calc_idx    = NYSE_INFO[v_key]['calc_idx']
    v_inc_columns = NYSE_INFO[v_key]['inc_columns']
    v_indexes     = NYSE_INFO[v_key]['indexes']

   /*** This part is not traversing the "indexes" section ***/

    for k, v in DATA_INFO[v_key]['indexes'].items():
      print("KEY: ", k)
      print("VAL: ", v)

Большое спасибо заранее.

1 Ответ

0 голосов
/ 13 апреля 2020

Ну, там была синтаксическая ошибка в любом случае, вы можете использовать циклы ниже для итерации по ней.

for OuterKey, OuterValue in DATA_INFO.items():

    if (isinstance(OuterValue, dict)):
        print("Key :"+ OuterKey)

        for InnerKey, InnerValue in OuterValue.items():
            if isinstance(InnerValue, list):
                print("\t"+InnerKey+ " -> ")
                for eachEle in InnerValue:
                    print(eachEle)
            else:
                print("\t"+InnerKey+ " -> " +OuterValue.get(InnerKey))
    else:        
        pass

Вы можете усовершенствовать, чтобы получить лучший результат. Я только что повторил структуру.

ПРИМЕЧАНИЕ. Я обновил структуру, как показано ниже.

DATA_INFO = {'file1_info': {
               'filename'   : 'Datafile1_' + str(yyyy),
               'file_ext'   : 'xls',
               'active'     : 'Y',
               'calc_idx'   : '1,4',
               'inc_columns': '1,2,11',
               'indexes':
                 [{'name': 'ZAXDR',   'active': 'N', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'},
                 {'name': 'ZAXLP',   'active': 'Y', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'},
                 {'name': 'ZAXERNL', 'active': 'Y', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'},
                 {'name': 'ZAXERNS', 'active': 'Y', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'}]
              },
             'file2_info': {
               'filename'   : 'Datafile2_' + str(yyyy),
               'file_ext'   : 'xls',
               'active'     : 'Y',
               'calc_idx'   : '1,4',
               'inc_columns': '1,2,11',
               'indexes':[
                 {'name': 'ZAX', 'active': 'Y', 'idx_type': 'domestic', 'data_row': 9, 'multi_benchmark': 'N'}]
              }
            }

'indexes' -> значение ключа обновлено до списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...