【问题标题】:How to dynamically generate key and assign values to a nested dictionary in python如何在python中动态生成键并将值分配给嵌套字典
【发布时间】:2021-06-01 17:32:41
【问题描述】:

我有一个字典列表作为输入:

[{
Acc: "ABC IN."
CFC: "XC"
CC: "1001"
SC: "DER"
Config Path: "..//"
File Path: "..//"
}]

我想把它转换成一个模板嵌套字典唯一的问题是嵌套字典的键也是从上面的字典本身派生的 期望的输出

{'XC': {'1001': {'DER': {'Config Path': '..//' ,'File Path' : "..//" }}}}

输入可以是多个,每当新的 CFC 、 CC 或 SC 到达时,都会在与前一个相同的级别上生成一个新密钥。

我尝试动态生成密钥,但显示未找到密钥错误

main_dict = {}
for item in main_dict_list:
    main_dict[item['CFC']][item['CC']][item['SC']]['Config Path']=item['Config Path']
    main_dict[item['CFC']][item['CC']][item['SC']]['File Path']=item['File Path']

我也尝试按照层次结构从字典中输入键值

main_dict = {}


for item in main_dict_list:
 
    temp={}
    temp['model_config_path']=item['Config Path']
    temp['model_config_path']=item['File Path']
    temp1 = {}
    temp1[item['SC']] = temp
    temp2 ={}
    temp2[item['CC']] =temp1
    main_dict[item['CFC']] =temp2

它似乎也无法正常工作。 我无法考虑任何其他解决方案

【问题讨论】:

    标签: python dictionary dynamic


    【解决方案1】:

    你必须创建每个级别。

    main_dict = {}
    for item in main_dict_list:
        main_dict[item['CFC']] = {item['CC']: {item['SC']: {'Config Path': item['Config Path'], 'File Path': item['File Path']}}}
    

    【讨论】:

    • 如果任何新的条目/键被添加到一个级别,上面的代码似乎会覆盖 - 没有按预期工作
    • 您没有将其指定为要求。也许您需要扩展您的示例。
    【解决方案2】:

    您可以使用 setdefault 自动合并常用键:

    main_dict_list = [
         { 'Acc': "ABC IN.",
           'CFC': "XC",
           'CC': "1001",
           'SC': "DER",
           'Config Path': "..//",
           'File Path': "..//"
         },
         { 'Acc': "ABC IN.",
           'CFC': "XC",
           'CC': "1002",
           'SC': "DER",
           'Config Path': "..//c",
           'File Path': "..//f"
         },
    ]
    
    main_dict = dict()
    
    for d in main_dict_list:
        content = {k:d[k] for k in ("Config Path","File Path") }
        main_dict.setdefault(d["CFC"],dict()) \
                 .setdefault(d["CC"],dict())  \
                 .setdefault(d["SC"],content)
    
    print(main_dict)
          
    {'XC': {'1001': {'DER': {'Config Path': '..//', 'File Path': '..//'}},
            '1002': {'DER': {'Config Path': '..//c', 'File Path': '..//f'}}}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      相关资源
      最近更新 更多