使用其他两个词典更新嵌套词典

2024-09-27 22:23:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套字典,我正在寻找更新使用两个字典。我要填充的空字典如下below:- 你知道吗

master_config_skeleton = {
"ingestion_config":
    {
    "location":{}, 
    "start_sequence":{}, 
    "datafeed":
        {
        "t04047":
            {
            "validation":
                {
                "triple_check":{},
                "record_count_validation":{}
                }, 
            "date_pattern":{}, 
            "cdc_config": {}
            }
        }
    }
}

其中一个保存遍历路径的字典如下所示

    traversal_path_dict = {
        'cdc_config': "['ingestion_config']['datafeed']['t04047']['cdc_config']",
        'datafeed': "['ingestion_config']['datafeed']",
        'date_pattern': "['ingestion_config']['datafeed']['t04047']['date_pattern']",
        'ingestion_config': "['ingestion_config']",
        'location': "['ingestion_config']['location']",
        'record_count_validation': "['ingestion_config']['datafeed']['t04047']['validation']['record_count_validation']",
        'start_sequence': "['ingestion_config']['start_sequence']",
        't04047': "['ingestion_config']['datafeed']['t04047']",
        'triple_check': "['ingestion_config']['datafeed']['t04047']['validation']['triple_check']",
        'validation': "['ingestion_config']['datafeed']['t04047']['validation']"}

另一个保存数据的字典看起来below:- 你知道吗

master_data_dict = {   'cdc_config': {   'active_table': 'db_b2b_curated_flexcab_active.t04047',
                      'custom_cdc_query': '',
                      'delete_filters': '["","",""]',
                      'delete_query': '',
                      'history_table': 'db_b2b_curated_flexcab_historical.t04047_historical',
                      'key_cols': '[INVC_ARGT_ID, BILL_CYCLE_EFF_DT, '
                                  'BILL_CYCLE_CD]',
                      'start_date_col': '[BILL_CYCLE_EFF_DT]',
                      'update_ts_col': 'bill_cycle_end_dt'},
    'date_pattern': {'ord_end_dt': '%d.%m.%Y', 'ord_sta_dt': '%d.%m.%Y'},
    'ingestion_config': {   'app': 'Replicator',
                            'feed_id': 2382,
                            'hdfs_home_dir': '/data/b2b',
                            'seq_type': 'SEQUENCE',
                            'source': 'FLEXCAB'},
    'location': {   'base_dir': '/home/sfxuser/B2B_DATALAKE/data/b2b/land/FLEXCAB',
                    'error_dir': 'Error',
                    'input_dir': 'Input',
                    'unzipped_dir': 'src'},
    'record_count_validation': {   'footer': 'N',
                                   'header': 'N',
                                   'rec_cnt_pos_ctl': '0:10'},
    'start_sequence': {'initial_seq_id': '00000001', 'length': 8},
    't04047': {   'cdc': 'N',
                  'config_path': '/apps/b2b_datalake/legacy/FLEXCAB/cfg/CSV/t04047.csv',
                  'format': 'fixedwidth'},
    'triple_check': {   'file_count': 3,
                        'file_extensions': '[zip, ctl, eot]',
                        'file_pattern': 'FLEXCAB_B2B_T04047_O_(<batch_seq>)_*'},
    'validation': {'file_date_format': '%Y%m%d%H%M%S'}}

正如您所注意到的,并非我要填充的字典中的所有键都有值。第二个字典基本上是由保存键值对的excel生成的数据框。excel工作簿的所有工作表都存储在单独的list:- 你知道吗

sheets = ['ingestion_config', 'location', 'start_sequence', 'datafeed', 't04047', 'validation', 'triple_check', 'record_count_validation', 'date_pattern', 'cdc_config']

我所做的一切far:- 你知道吗

for sheet in sheets:
    master_config_skeleton[traversal_path_dict[sheet]].update(master_data_dict[sheet])

但是由于方括号限定了值,我得到了一个键错误


Tags: configdate字典checkcountlocationstartvalidation

热门问题