【问题标题】:How to zip multiple lists into a nested dictionary in python如何将多个列表压缩到python中的嵌套字典中
【发布时间】:2021-02-10 10:28:45
【问题描述】:

有多个列表,我想从中创建一个嵌套字典:

x = ['a','b','c','d']
keys_a = ['1','2','3','4']
values_a = [11,22,33,44]
keys_b = ['5','6','7','8']
values_b = [55,66,77,88]
keys_c = ['9','10','11','12']
values_c = [99,1010,1111,1212]
keys_d = ['13','14','15','16']
values_d = [1313,1414,1515,1616]

我要做的是将a与keys_a和values_a匹配,将b与keys_b和values_b匹配,将c与keys_c和values_c匹配,等等。

预期的输出如下:

d = {'a':{'1':11,
          '2':22,
          '3':33,
          '4':44},
     'b':{'5':55,
          '6':66,
          '7':77,
          '8':88},
     'c':{'9':99,
          '10':1010,
          '11':1111,
          '12':1212,
          '13':1313},
     'd':{'14':1414,
          '15':1515,
          '16':1616,
          '17':1717}}

你能帮我用python实现这个吗,我试过用zip功能,但它没有给我预期的结果。对于我应该编写的具有预期输出的代码有什么建议吗?

谢谢!

【问题讨论】:

  • 您需要多次调用 zip。你能展示一下你的尝试吗?

标签: python list dictionary nested


【解决方案1】:

如果您对列表和字典理解感到满意,您可以压缩x 与您的键列表和值列表的列表。看起来像这样:

output = {
    a: dict(zip(k, v))
    for a, k, v in zip(
        x,
        [keys_a, keys_b, keys_c, keys_d],
        [values_a, values_b, values_c, values_d]
)}

如果这很难读(确实如此),您可以使用更传统的 for 循环,如下所示:

output = {}
keys = [keys_a, keys_b, keys_c, keys_d]
values = [values_a, values_b, values_c, values_d]
for a, k, v in zip(x, keys, values):
    output[a] = dict(zip(k, v))

【讨论】:

    【解决方案2】:

    您可以使用以下使用exec 内置函数的代码:

    x = ['a', 'b', 'c', 'd']
    keys_a = ['1', '2', '3', '4']
    values_a = [11, 22, 33, 44]
    keys_b = ['5', '6', '7', '8']
    values_b = [55, 66, 77, 88]
    keys_c = ['9', '10', '11', '12']
    values_c = [99, 1010, 1111, 1212]
    keys_d = ['13', '14', '15', '16']
    values_d = [1313, 1414, 1515, 1616]
    
    d = {}
    
    for val in x:
        c = {}
    
        exec(f"""\
    for key, val in zip(keys_{val}, values_{val}):
        c[key] = val
    """)
    
    
        d[val] = c
    
    print(d)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多