【问题标题】:Nested dictionary from several lists with python使用python从几个列表中嵌套字典
【发布时间】:2018-10-18 01:59:12
【问题描述】:

我有一些列表定义如下:

main_0 = ['Main_0']
main_1 = ['Main_1']
main_2 = ['Main_2']

level_0 = ['LEVEL0',
           'LEVEL0_1',
           'LEVEL0_2']
level_1 = ['LEVEL1',
           'LEVEL1_1']
level_2 = ['LEVEL2']

val_0 = [1, 2, 3]
val_1 = [10, 20]
val_2 = [52]

我想创建一个嵌套字典,如下所示:

{'Main_0' : {'LEVEL0' : 1,
             'LEVEL0_1' : 2,
             'LEVEL0_2' : 3},
 'Main_1' : {'LEVEL1' : 10,
             'LEVEL1_1' : 20},
 'Main_2' : {'LEVEL2' : 52}}

这是否可能,或者我应该使用不同的数据结构来解决这个问题?在那种情况下是哪一种?

【问题讨论】:

    标签: python python-3.x dictionary nested


    【解决方案1】:

    您可以在多个级别使用 dict 理解:

    In [195]: mains = [main_0, main_1, main_2]
    
    In [196]: levels = [level_0, level_1, level_2]
    
    In [197]: vals = [val_0, val_1, val_2]
    
    In [200]: {m[0]: {l: v for l, v in zip(ll, vv) } for m, ll, vv in zip(mains, lev
         ...: els, vals)}
    Out[200]: 
    {'Main_0': {'LEVEL0': 1, 'LEVEL0_1': 2, 'LEVEL0_2': 3},
     'Main_1': {'LEVEL1': 10, 'LEVEL1_1': 20},
     'Main_2': {'LEVEL2': 52}}
    

    【讨论】:

    • 将发布完全相同的解决方案; {m[0]: {l: v for l, v in zip(levels[i], vals[i])} for i, m in enumerate(mains)}。猜猜使用另一个zip 是更好的解决方案。
    • 内部的dict理解可以替换为dict(zip(ll, vv))
    【解决方案2】:

    只需遍历这些列表中的每一个并构建一个哈希:

    mains = main_0 + main_1 + main_2
    levels = [level_0, level_1, level_2]
    values = [val_0, val_1, val_2]
    
    result = {}
    for main_index, main in enumerate(mains):
        level_result = {}
        for level_index, level in enumerate(levels[main_index]):
            value = values[main_index][level_index]
            level_result[level] = value
        result[main] = level_result
    
    print(result)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多